var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket ? req.connection.socket.remoteAddress : null);
Lưu ý rằng đôi khi bạn có thể nhận được nhiều hơn một địa chỉ IP req.headers['x-forwarded-for']
. Ngoài ra, một x-forwarded-for
tiêu đề sẽ không luôn luôn được đặt mà có thể gây ra lỗi.
Định dạng chung của trường là:
x-chuyển tiếp-cho: client, proxy1, proxy2, proxy3
trong đó giá trị là danh sách địa chỉ IP được phân tách bằng dấu phẩy + không gian, phần lớn bên trái là máy khách gốc và mỗi proxy liên tiếp chuyển yêu cầu thêm địa chỉ IP nơi nhận được yêu cầu. Trong ví dụ này, yêu cầu đi qua proxy1
, proxy2
và sau đó proxy3
. proxy3
xuất hiện dưới dạng địa chỉ từ xa của yêu cầu.
Đây là giải pháp được đề xuất bởi Arnav Gupta với bản sửa lỗi Martin đã đề xuất bên dưới trong các nhận xét cho các trường hợp khi x-forwarded-for
không được đặt:
var ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress
req.ip
nguồn - expressjs.com/en/api.html#req.ip