如果是HTTPS请求,如何findnode.js中的远程地址?

HI。 在node.js中,如果是http请求,我可以通过req.connection.remoteAddress获得remoteAddress,

那么,如何获取https请求呢? 我发现有req.socket.remoteAddress,但我不确定。 请指教。 谢谢。

看起来确实有些奇怪/破碎。 从节点0.4.7开始,似乎http上有remoteAddress:

  • req.connection.remoteAddress
  • req.socket.remoteAddress

在https上,这两个都是未定义的,但是

  • req.connection.socket.remoteAddress

确实有效 虽然这不是在http上可用,所以你需要仔细检查。 我无法想象这种行为是故意的。

由于使用Google的“快速js ip”直接指向这里,这有点相关。

Express 3.0.0 alpha现在提供了一种为客户端请求检索IP地址的新方法。 只需使用req.ip 如果你正在做一些代理jiggery-pokery,你可能会对app.set("trust proxy", true);感兴趣app.set("trust proxy", true);req.ips

我build议您阅读Express Google小组的全部讨论。

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

请注意,有时您可以在req.headers ['x-forwarded-for']中获取多个IP地址,特别是在使用访问您的服务器的移动电话(wifi和运营商数据)时。

req.headers['x-forwarded-for']很容易被操纵,所以你需要一个正确configuration的代理服务器。

在使用req.headers['x-forwarded-for']之前,最好检查req.connection.remoteAddress对已知代理服务器的列表。