2015-09-21 33 views
0
{ 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' } 

我使用koa.io从NPM尝试并获得客户端连接的IP地址。当我尝试下面的代码时,上面的内容被打印在控制台中。我似乎无法获得客户端的IP地址。头不透露IP地址?

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

我目前在localhost上。所以我期待客户端IP地址是127.0.0.1?

回答

0

尝试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); 
+0

你好试了一下:'的console.log(this.request.ip);',返回undefined:/ –

+0

你是否在身后代理?我在这里使用nginx,我也没有得到cleint ip。我必须做两件事才能让它正确。在我的服务器nginx配置中,我不得不添加'proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;',然后与文档“x-forwarded-for”ist不支持,因此我不得不'this.request.header [的x转发换“]'。我会根据更新的答案... –

+0

你好!我目前只在本地主机上的一切。也许这是问题? –