node.js - 在Cloud9 IDE中获取用户的真实IP地址

标签 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' header ,对吗?使用cloud9绝对不可能获取用户的真实IP吗?这对我的项目至关重要。

最佳答案

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

关于node.js - 在Cloud9 IDE中获取用户的真实IP地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19060477/

相关文章:

android - 从 URL 获取图像时显示 java.net.UnknownHostException : Host is unresolved in android device?

java - 如何在box java sdk中向BoxApiConnection添加代理?

node.js - 从 super 账本结构获取 "Error: 8 RESOURCE_EXHAUSTED: Sent message larger than max (2217 vs. 15)"

logging - 记录上游请求 Nginx 反向代理

c# - 带有 wsHttpBinding 的 WCF 服务 - 操作 HTTP 请求 header

Angular 没有重载匹配这个调用

Python:如何在 POST 请求中发送 html 代码

javascript - 使用事件发射器的简单发布/订阅系统

node.js - 上传前在 Multer 中验证

javascript - 使用 Node.js 处理多个 MySQL 查询的方法