Node.js 负载平衡、WebSocket和NodeJ出错

Node.js 负载平衡、WebSocket和NodeJ出错,node.js,nginx,docker,socket.io,Node.js,Nginx,Docker,Socket.io,我有两个带有socket.io的NodeJS应用程序,它位于本地(docker)NGINX负载平衡器后面。Wenn只有一个应用程序启动,一切正常。当我添加秒数时,大约每秒钟重新加载一次,就会出现以下错误 WebSocket connection to 'wss://[HOST]/socket.io/?EIO=3&transport=websocket&sid=9CmO27cJsdmqMwwXAAAK' failed: Error during WebSocket handshak

我有两个带有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;
        }
    }
}

您可能没有将
socket.io
设置为支持多个节点,在这种情况下,端口3333上的服务器可能会收到与服务器在端口4444上设置的连接相关的请求/帧(反之亦然),这将导致问题(因为3333设置的连接对4444来说是未知的)


这里列出了各种解决方案:

谢谢,但我已经设置了带和不带多个节点的WebSocketsetup@refextu您使用了哪种方法?redis:
io.adapter(redis({host:'192.168.99.1',port:6379}))和连接工作得非常好。当我启动一个具有非负载平衡端口的应用程序并发出事件时。它将被推送到loadbalanced应用程序上已连接的客户端。但您还需要确保连接到正确的负载平衡端点(在我链接到的页面上,他们建议在NGINX上游配置中使用
ip_hash
)。例如:客户端应该始终与同一个上游进行对话。好的,我做了两个更改:*添加映射自:*切换到ip_哈希此组合似乎有效。非常感谢。