2017-05-29 56 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