我有两个带有socket.io的NodeJS应用程序,它位于本地(docker)NGINX负载均衡器后面。 Wenn只有一个应用程序,一切正常。当我添加第二个时,我会在每次重新加载时得到以下错误。
WebSocket connection to 'wss://[HOST]/socket.io/?EIO=3&transport=websocket&sid=9CmO27cJsdmqMwwXAAAK' failed: Error during WebSocket handshake: Unexpected response code: 400
这是我的NGINX配置:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream myhost {
least_conn;
server 192.168.99.1:3333;
server 192.168.99.1:4444;
}
server {
listen 80;
listen 443 ssl;
server_name [HOST];
ssl_certificate server.crt;
ssl_certificate_key server.key;
location / {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_pass http://myhost;
}
}
}
答案 0 :(得分:0)
您可能没有socket.io
设置为支持多个节点,在这种情况下,端口3333上的服务器可能获得与端口4444上的服务器设置的连接相关的请求/帧(反之亦然)这将导致问题(因为4433未知设置3333的连接)。
此处列出了各种解决方案:https://socket.io/docs/using-multiple-nodes/