在Cloud9 IDE中获取用户的真实IP地址

时间:2013-09-27 21:38:52

标签: node.js proxy http-headers socket.io cloud9-ide

在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?这对我的项目至关重要。

1 个答案:

答案 0 :(得分:2)

Cloud9确实使用双层代理来访问在工作区中运行的应用程序。第一个代理检查访问权限,第二个代理是将请求隧道传送到工作区。第二个代理由我们的基础结构提供程序OpenShift托管,并且该代码覆盖第一个代理设置的x-forwarded-for标头。不幸的是,我们目前无法解决这个问题。正如评论中所提到的那样,尽量避免依赖远程IP。