Error with Loadbalancing, Websockets and NodeJS



我有两个带有 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 来说是未知的(。

下面概述了各种解决方案: https://socket.io/docs/using-multiple-nodes/

最新更新