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