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.ipsource - expressjs.com/en/api.html#req.ip