2012-11-26 63 views
2

我有一個運行在Nginx後面的Express應用程序,所以當我嘗試獲取用戶的IP時,我總是得到127.0.0.1而不是真實的應用程序,它由Nginx在X-Real-IP標題中設置。我如何得到這個頭文件?有沒有辦法讓通過socket對象?如何使用Socket.io獲取請求的HTTP頭文件?

的代碼將是基本類似的:

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

    var ip = /* ??? */; 

    /* do something with the IP… 

     … some stuff … 

    */ 
}); 

回答

15

要獲取IP,當你落後NGINX或其他代理運行:

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

+0

其實這就是我正在使用的,它總是給我'127.0.0.1',因爲這是代理的IP(即Nginx),真正的IP位於「X-Real-IP」字段中。 – bfontaine

+2

好的。嘗試添加'proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;'到你的nginx配置 – ajtrichards

+0

我已經在我的nginx配置中有這一行。 – bfontaine