【问题标题】:header not revealing the ip address?标头不显示IP地址?
【发布时间】:2015-09-21 11:51:47
【问题描述】:
{ host: '127.0.0.1:8080',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36',
  accept: '*/*',
  referer: 'http://127.0.0.1:8080/',
  'accept-encoding': 'gzip, deflate, sdch',
  'accept-language': 'en-US,en;q=0.8',
  cookie: 'io=bP2eXrqS3SkWYY4cAAAC11' }

我正在使用来自 npm 的 koa.io 来尝试获取连接的客户端的 IP 地址。当我尝试以下代码时,上面的代码会打印在控制台中。我似乎无法获取客户端的 IP 地址。

app.io.use(function* userLeft(next) {
    // on connect
    console.log(this.headers);
});

我目前在本地主机上。所以我希望客户端 IP 地址是 127.0.0.1?

【问题讨论】:

    标签: node.js header koa


    【解决方案1】:

    试试this.request.ip。它应该工作......

    经过测试,我意识到两件事。

    1. 在代理后面时,请确保代理使用 x-forwarded-for 标头转发客户端 IP。
    2. 理论上 1. 应该足以让this.request.ip 返回客户端 IP,但事实并非如此。但是配置我的代理后,this.request.header["x-forwarded-for"] 返回客户端ip

    使用这个简单的服务器进行测试:

    var koa = require('koa');
    var app = koa();
    
    app.use(function *(){
    this.body = this.request.ip;
    });
    
    app.listen(3000);
    

    【讨论】:

    • 你好试过了:console.log(this.request.ip);,返回未定义:/
    • 你碰巧在代理后面吗?我在这里使用 nginx,但我也没有得到客户端 ip。我必须做两件事才能让它正确。在我的服务器 nginx 配置中,我必须添加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;,然后与不支持文档“x-forwarded-for”相比,因此我必须添加 this.request.header["x-forwarded-for"]。我会相应地更新答案...
    • 您好!我目前只在 localhost 上提供所有内容。也许这就是问题所在?
    • 我现在刚刚在 localhost 上尝试过,console.log(this.request.ip); 返回 ::ffff:127.0.0.1 。你运行的是什么版本的 koa 和 node?​​span>
    • 最新的! 0.12 for node 和 koa ^1.0.0 (so latest)
    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2017-01-03
    相关资源
    最近更新 更多