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
заголовок не всегда будет установлен, что может привести к ошибке.
Общий формат поля:
х-пересылаются-за: client, proxy1, proxy2, proxy3
где значение представляет собой список IP-адресов, разделенных запятыми + пробелами, крайний левый - исходный клиент, и каждый последующий прокси-сервер, прошедший запрос, добавляет IP-адрес, с которого он получил запрос. В этом примере, запрос проходит через proxy1
, proxy2
и затем proxy3
. proxy3
отображается как удаленный адрес запроса.
Это решение, предложенное Арнавом Гуптой с исправлением, предложенным Мартином ниже в комментариях для случаев, когда x-forwarded-for
оно не установлено:
var ip = (req.headers['x-forwarded-for'] || '').split(',').pop().trim() ||
req.connection.remoteAddress ||
req.socket.remoteAddress ||
req.connection.socket.remoteAddress
req.ip
source - expressjs.com/en/api.html#req.ip