如何获取连接到 websocket 服务器的所有客户端的 "real" IP 地址
How to get the "real" IP addresses of all clients connected to websocket server
所以我有一个 nodejs web socket server 坐在 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;
}
}
我的网络套接字服务器应用程序代码包含将客户端的 IP 地址存储在 table 中以便稍后检索的逻辑。在客户端连接时检索客户端的 IP 地址没有问题,因为我可以简单地执行类似 req.headers["x-forwarded-for"]
的操作,因为我可以在每个新连接上访问 req
对象。我的问题是每当我想只向某些客户端的子集发送服务器广播时检索“转发的 IP 地址”。因为每当我执行 ws._socket.remoteAddress
(其中 ws
是网络套接字对象)时,我都希望得到 IP 地址:127.0.0.1
.
我想这是一个关于我用来托管网络套接字服务器的特定 npm 包的问题:https://www.npmjs.com/package/ws。
您的问题已在 the NPM page you linked 中得到解答:
When the server runs behind a proxy like NGINX, the de-facto standard is to use the X-Forwarded-For
header.
wss.on('connection', function connection(ws, req) {
const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0];
});
您可以将 ip
存储在 ws
对象上(事实上,您可以 maybe 用 ws._socket.remoteAddress
覆盖 ip
也是)在那个时候。
所以我有一个 nodejs web socket server 坐在 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;
}
}
我的网络套接字服务器应用程序代码包含将客户端的 IP 地址存储在 table 中以便稍后检索的逻辑。在客户端连接时检索客户端的 IP 地址没有问题,因为我可以简单地执行类似 req.headers["x-forwarded-for"]
的操作,因为我可以在每个新连接上访问 req
对象。我的问题是每当我想只向某些客户端的子集发送服务器广播时检索“转发的 IP 地址”。因为每当我执行 ws._socket.remoteAddress
(其中 ws
是网络套接字对象)时,我都希望得到 IP 地址:127.0.0.1
.
我想这是一个关于我用来托管网络套接字服务器的特定 npm 包的问题:https://www.npmjs.com/package/ws。
您的问题已在 the NPM page you linked 中得到解答:
When the server runs behind a proxy like NGINX, the de-facto standard is to use the
X-Forwarded-For
header.
wss.on('connection', function connection(ws, req) { const ip = req.headers['x-forwarded-for'].split(/\s*,\s*/)[0]; });
您可以将 ip
存储在 ws
对象上(事实上,您可以 maybe 用 ws._socket.remoteAddress
覆盖 ip
也是)在那个时候。