如何使用Socket.io获取请求的HTTP头?

bfo*_*ine 4 http express socket.io

我有一个在Nginx后面运行的Express应用程序,所以当我尝试获取用户的IP时,我总是得到127.0.0.1而不是真正的那个,这是由Nginx在X-Real-IP标题中设置的.我如何获得此标题?有没有办法把它通过socket对象呢?

代码基本上是这样的:

io.sockets.on( 'connection', function( socket ) {

    var ip = /* ??? */;

    /* do something with the IP…

       … some stuff …

     */
});
Run Code Online (Sandbox Code Playgroud)

ajt*_*rds 20

要在NGINX或其他代理后面运行时获取IP:

var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;
Run Code Online (Sandbox Code Playgroud)

或者对于Socket.IO

client.handshake.headers['x-forwarded-for'] || client.handshake.address.address;
Run Code Online (Sandbox Code Playgroud)

来自:http://www.hacksparrow.com/node-js-get-ip-address.html

  • 喔好吧.尝试将`proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;`添加到你的nginx配置中 (3认同)
  • 如果恶意用户发送了"X-Forwarded-For"标头,您应该小心在应用程序中启用,而无需先检查服务器将执行的操作.他们可能会使用它来规避任何IP阻止(或速率限制)措施.例如,如果用户将"X-Forwarded-For"设置为"X-Forwarded-For"之类的"魔术",您的应用程序将其视为"魔术",<他们的实际IP>`这样,这是很常见的.通过操纵标题,用户可以"更改其IP"而无需实际更改其IP. (2认同)