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

在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.xxx)

x-forwarded-for是cloud9的代理之一(107.23.232.64,54.236.78.114,107.23.123.140)。

所以显然是使用双重代理,其中一个代理层不提供'x-forwarded-for'头部,对吗? 使用cloud9绝对不可能获得真正的用户IP吗? 这对我的项目是至关重要的。

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