在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'
标题,对吧?使用cloud9绝对不可能获得用户的真实IP?这对我的项目至关重要。
答案 0 :(得分:2)
Cloud9确实使用双层代理来访问在工作区中运行的应用程序。第一个代理检查访问权限,第二个代理是将请求隧道传送到工作区。第二个代理由我们的基础结构提供程序OpenShift托管,并且该代码覆盖第一个代理设置的x-forwarded-for
标头。不幸的是,我们目前无法解决这个问题。正如评论中所提到的那样,尽量避免依赖远程IP。