【发布时间】:2017-12-20 17:38:14
【问题描述】:
我已经搜索了整个 SO,但找不到我的答案。我想通过套接字 io 获取客户端 IP 地址。 v2.0.3
app.js
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
/// other imports ...
//with or without this line nothing changes
io.set('transports', ['websocket']);
app.use(function(req, res, next) {
req.db = db;
next();
});
require('./sockets')(io, db);
sockets.js
module.exports = function(io, db) {
io.on('connection', function(socket) {
var ip = socket.request.socket.remoteAddress ; // undefined
//var ip = socket.handshake.headers["x-forwarded-for"]; undefined
//var ip = socket.handshake.headers["X-Forwarded-For"]; undefined
});
});
所以这段代码不起作用:
var ip = socket.request.socket.remoteAddress
这个不能用:
var ip = socket.handshake.headers["x-forwarded-for"];
//var ip = socket.handshake.headers["X-Forwarded-For"];
使用这个 nginx 配置:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
有没有办法通过socket.io获取客户端IP地址?
【问题讨论】:
-
当您尝试使用第一个时会得到什么?
-
@Wright:
undefined -
如果您可以发布一些代码以提供有关您使用它的位置的上下文,这将有所帮助。它对我有用。
-
@Wright:添加了更多代码。我尝试了所有方法(我认为),但我无法获得 IP。
标签: node.js sockets nginx socket.io