【问题标题】:How to get request’s HTTP headers with Socket.io?如何使用 Socket.io 获取请求的 HTTP 标头?
【发布时间】:2012-11-26 20:55:30
【问题描述】:

我有一个 Express 应用程序在 Nginx 后面运行,所以当我尝试获取用户的 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 …

     */
});

【问题讨论】:

    标签: http express socket.io


    【解决方案1】:

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

    var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;
    

    或者对于 Socket.IO

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

    发件人:http://www.hacksparrow.com/node-js-get-ip-address.html

    【讨论】:

    • 其实这是我用的,它总是给我127.0.0.1,因为这是代理的IP(即Nginx),而真正的IP在X-Real-IP字段中。跨度>
    • 嗯,好的。尝试将proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 添加到您的 nginx 配置中
    • 谢谢,但我的问题是关于 Socket.io,所以我没有任何 req(也不是 res)对象,而是一个 socket 一个 :-(
    • 呸!!试试 client.handshake.headers['x-forwarded-for'] || client.handshake.address.address;
    • 如果恶意用户发送X-Forwarded-For 标头,您应该小心在您的应用程序中启用而不先检查您的服务器会做什么。他们有可能使用它来规避任何 IP 阻塞(或速率限制)措施。例如,如果用户将X-Forwarded-For 设置为magic 之类的东西,而您的应用程序认为X-Forwarded-Formagic, <their actual IP>,这是很常见的。因此,通过操纵标头,用户可以“更改其IP”而无需实际上改变了他们的 IP。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 2016-01-29
    • 2015-09-21
    • 2016-03-21
    相关资源
    最近更新 更多