【发布时间】:2021-04-26 09:01:16
【问题描述】:
我有一个带有 Express 和 Socket.io (Ubuntu 18.04) 的 Nodejs 服务器应用程序。在 nGinx (1.14) 反向代理进入现场之前,它一直运行良好。 nginx 服务器运行在 Node.js 应用程序的不同机器上,每个应用程序都在它自己的 vm 上,在同一个网络中。
2.1.1 版本的服务器和客户端。
nginx 服务器负责多个应用重定向。
我尝试了几种配置组合,但没有任何效果。
这是我尝试过的(“company1”的示例):
/etc/nginx/conf.d 中的default.conf
location /company1-srv/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_pass http://172.16.0.25:51001/;
}
然后在客户端代码中,我使用“路径”选项进行连接,因为 socket.io 放错了它的库路径。
// companySrv and URL is actually returned by another service (following code is for illustrative purposes):
let companyUrl = 'https://api.myserver.com/company1-srv';
let companySrv = '/company1-srv';
socket(companyUrl, {
path: companySrv + '/socket.io/'
});
我还尝试删除路径选项并为 socket.io 配置了一个特定的 /location(用于测试目的):
location /socket.io/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_redirect off;
proxy_pass http://172.16.0.25:51001/socket.io/;
}
没有任何效果。
它连接,但不发出任何东西。片刻之后(一分钟左右),它变得不可用,引发“断开连接”(原因:传输关闭)客户端事件。
服务器:
const io = require('socket.io')(https || http, {
transports: ['polling', 'websocket'],
allowUpgrades: true,
pingInterval: 60000*60*24,
pingTimeout: 60000*60*24
});
我还尝试编辑 nginx.conf 并编写“上游 socket_nodes { ...”并使用 proxy_pass http://socket_nodes。这没有任何意义,因为我需要根据公司进行准确的重定向,但为了进行测试,我做了,但效果不佳。
我需要做什么?
谢谢
【问题讨论】:
标签: node.js nginx socket.io nginx-reverse-proxy