在使用socket.io代理时无法获取远程地址

13

在我的socket.io代码中,

socket.sockets.on('connection', function(client){ 
    var ip = client.handshake.address.address;
    ..
}

我的服务器位于代理后面,因此IP地址始终返回 127.0.0.1。如何正确获取远程地址?

编辑:我正在使用 http-proxy。


检查客户端握手头部是否包含'x-forwarded-for'或客户端握手地址是否存在,这个方法可行吗。 - user644745
3个回答

28

是的,这对我有效。

client.handshake.headers['x-forwarded-for'] || client.handshake.address.address;

我已经正确获取了远程IP地址,而不是127.0.0.1


4
确认:这是我通过谷歌搜索找到的最近10个答案中的第一个有效解决方案。 - Daniel W.
这对我没有用。我在网络服务器/代理后面,使用1.3.2版本。 - Rachael
这个只适用于Socket 0.9版本。那么对于版本大于1.0的呢? - John Nguyen

7
在版本大于1.0的情况下,语法类似于:
socket.handshake.headers['x-forwarded-for'] || socket.request.connection.remoteAddress;

0
对于可能来自Google的人,使用NGINX:这些方法都不适用于我,我遵循了另一个问题中的答案并修改了我的proxy_pass,以创建一个新的标头,然后node就可以使用它。别忘了在此之后调用sudo systemctl restart nginx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接