var ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
(req.connection.socket ? req.connection.socket.remoteAddress : null);
Обратите внимание, что иногда вы можете получить более одного IP-адреса в req.headers['x-forwarded-for']
. Кроме того, заголовок x-forwarded-for
не всегда устанавливается, что может привести к ошибке.
Общий формат поля:
x-переадресовано для: client, proxy1, proxy2, proxy3
где значение представляет собой список IP-адресов, разделенных запятыми + пробелами, самый левый - исходный клиент, и каждый последующий прокси-сервер, прошедший запрос, добавляет IP-адрес, с которого он получил запрос. В этом примере запрос прошел через proxy1
, proxy2
, а затем proxy3
. proxy3
отображается как удаленный адрес запроса.
Это решение, предложенное Арнавом Гуптой с исправлением Мартин предложил ниже в комментариях для случаев, когда x-forwarded-for
не установлено:
var ip = (req.headers['x-forwarded-for'] || '').split(',').pop() ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress