在node.js + socket.io中,我使用此代码来获取用户的IP地址:
var clientIP = socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address;
但是结果是错误的。我 console.log
获取了这些值并得到了以下结果:
socket.handshake.address.address
显然是内部 IP (127.x.x.x)
x-forwarded-for
是 cloud9 的代理之一(107.23.232.64、54.236.78.114、107.23.123.140)。
所以显然使用了双重代理,并且代理层之一不提供 'x-forwarded-for'
header ,对吗?使用cloud9绝对不可能获取用户的真实IP吗?这对我的项目至关重要。
最佳答案
Cloud9 确实使用两层代理来访问工作区中运行的应用程序。第一个代理正在检查访问权限,第二个代理正在将请求隧道传输到工作区。第二个代理由我们的基础设施提供商 OpenShift 托管,该代理会覆盖第一个代理设置的 x-forwarded-for
header 。不幸的是,我们目前没有办法解决这个问题。正如评论中提到的,尽量避免依赖远程 IP。
关于node.js - 在Cloud9 IDE中获取用户的真实IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060477/