我不完全理解如何获得远程用户IP地址。
假设我有一个简单的请求路由,例如:
app.get(/, function (req, res){
var forwardedIpsStr = req.header('x-forwarded-for');
var IP = '';
if (forwardedIpsStr) {
IP = forwardedIps = forwardedIpsStr.split(',')[0];
}
});
上面的方法是正确的,还是有更好的方法来获得真正的用户IP地址?代理呢?
如果您在NGiNX之类的代理之后运行,那么您只需检查'x-forwarded-for'
:
var ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress
如果代理不是您的,我不会信任'x-转发-for'
头,因为它可能被欺骗。
虽然@alessioalex的答案是有效的,但还有另一种方法,如《快速指南》中“代理背后的快车”一节所述。
app.set('trust proxy',true)
添加到您的express初始化代码中。可选阅读:
req.ip
或req.ip
<代码>请求连接.远程地址不适用于此解决方案。
在nginx.conf
文件中:proxy\u set\u头X-Real-IP$remote\u addr代码>
在node.js
服务器文件中:var ip=req.headers['x-real-ip']||req.connection.remote地址;
请注意,express小写标题