IP thật của khách truy cập sau Cloudflare hoặc load balancer
Cách để máy chủ phía sau proxy lấy IP thật của khách truy cập một cách an toàn, với Nginx, Node.js và PHP.
Vì sao IP trông khác
Khi Cloudflare, load balancer hoặc Nginx đứng trước trang web, các kết nối máy chủ nhận được đến từ proxy đó, nên bạn thấy IP của proxy thay vì của khách truy cập. IP khách truy cập nằm trong header mà proxy thêm vào.
Cloudflare
Cloudflare đặt một IP khách truy cập duy nhất vào header CF-Connecting-IP. Để chắc chắn yêu cầu thực sự đến từ Cloudflare, chỉ tin header này khi IP kết nối nằm trong các dải IP Cloudflare công bố (cloudflare.com/ips).
X-Forwarded-For
Khi yêu cầu đi qua nhiều proxy, X-Forwarded-For gom các IP của chúng, phân cách bằng dấu phẩy. Giá trị đầu tiên được coi là khách truy cập, nhưng khách có thể tự ghi giá trị này, nên hãy đếm ngược từ giá trị mà proxy của bạn thêm vào cuối cùng và dùng giá trị ở vị trí bạn tin cậy được.
Nginx
Với module real_ip, liệt kê các dải proxy của bạn trong set_real_ip_from và đặt real_ip_header là CF-Connecting-IP hoặc X-Forwarded-For. Từ đó, nhật ký và ứng dụng sẽ nhận được IP khách truy cập.
Node.js và PHP
Trong Express, đặt app.set("trust proxy", số lượng proxy) và req.ip sẽ là IP khách truy cập. Trong PHP, chỉ dùng $_SERVER["HTTP_CF_CONNECTING_IP"] khi $_SERVER["REMOTE_ADDR"] là proxy của chính bạn.
Kiểm tra lại
Sau khi thiết lập, nếu IP trang web ghi lại trùng với IP hiển thị ở trang chủ IPinfoBox thì cấu hình đã đúng.
Kiểm tra IP và vị trí của bạn ngay.
Kiểm tra IP của tôi