提问者:小点点

Express.js:如何获取远程客户端地址


我不完全理解如何获得远程用户IP地址。

假设我有一个简单的请求路由,例如:

app.get(/, function (req, res){
   var forwardedIpsStr = req.header('x-forwarded-for');
   var IP = '';

   if (forwardedIpsStr) {
      IP = forwardedIps = forwardedIpsStr.split(',')[0];  
   }
});

上面的方法是正确的,还是有更好的方法来获得真正的用户IP地址?代理呢?


共3个答案

匿名用户

如果您在NGiNX之类的代理之后运行,那么您只需检查'x-forwarded-for'

var ip = req.headers['x-forwarded-for'] || req.socket.remoteAddress 

如果代理不是您的,我不会信任'x-转发-for'头,因为它可能被欺骗。

匿名用户

虽然@alessioalex的答案是有效的,但还有另一种方法,如《快速指南》中“代理背后的快车”一节所述。

  1. app.set('trust proxy',true)添加到您的express初始化代码中。

可选阅读:

  • 使用req.ipreq.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小写标题