2017-05-29 108 views
0

我有兩個NodeJS應用程序,socket.io位於本地(docker)NGINX負載均衡器的後面。 Wenn只有一個應用程序運行正常。當我添加第二個時,每次重新加載時都會收到以下錯誤消息。負載均衡,Websockets和NodeJS錯誤

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

你可能沒有socket.io設置爲支持多個節點,在這種情況下,在端口3333的服務器可能會請求/相關連接組框架由端口4444上的服務器啓動(反之亦然),這將導致問題(因爲由3333設置的連接對於4444是未知的)。

這裏有列出各種解決方案:https://socket.io/docs/using-multiple-nodes/

+0

謝謝,但我設置的WebSockets有和沒有多節點設置 – refextu

+0

@refextu哪種方法你用? – robertklep

+0

redis:'io.adapter(redis({host:'192.168.99.1',port:6379}));'和連接工作得很好。當我用一個不負載均衡的端口啓動一個應用程序併發出一個事件。它將被推送到負載均衡應用上連接的客戶端。 – refextu