如何获取连接到 websocket 服务器的所有客户端的"real" IP 地址



所以我有一个nodejs网络套接字服务器位于nginx反向代理后面。我的nginx配置如下:

server {
listen 80;
location / {
proxy_pass ​http://localhost:9898;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $remote_addr;
}
}

我的web套接字服务器应用程序代码包含将客户端的IP地址存储在表中以供以后检索的逻辑。当他们连接时,我检索客户端的IP地址没有问题,因为我可以简单地执行类似于req.headers["x-forwarded-for"]的操作,因为我在每个新连接上都可以访问req对象。我的问题是检索";转发的IP地址";每当我想只向某些客户端的子集发送服务器广播时。因为每当我执行ws._socket.remoteAddress(其中ws是web套接字对象(时,我都会期望得到IP地址:127.0.0.1

我想这是一个关于我用来托管web套接字服务器的特定npm包的问题:https://www.npmjs.com/package/ws.

您的问题在您链接的NPM页面中得到了回答:

当服务器在像NGINX这样的代理后面运行时,事实上的标准是使用X-Forwarded-For标头。

<blockquote\
wss.on('connection', function connection(ws, req) {
const ip = req.headers['x-forwarded-for'].split(/s*,s*/)[0];
});

>此时您可以将该ip存储在ws对象上(事实上,您也可以使用该ip覆盖ws._socket.remoteAddress(。

最新更新