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-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
джерело - expressjs.com/en/api.html#req.ip