【问题标题】:Socket.io behind load balancer负载均衡器后面的 Socket.io
【发布时间】:2017-11-16 01:51:21
【问题描述】:

我在天蓝色负载均衡器后面的 nginx 后面使用 socket.io。如何在客户端我不断收到类似

的错误
WebSocket connection to 'ws://**********/socket.io/?    session_id=i9bk_iqkVrUveKwvIBz4fMNDbkoYuaITQ_APO73sgQd6-tQBaRkjp8RR8N9LTA5LnqMeKXzZg5AXXgjEevFKqSKRJJI8iaK3&id=dc978ae038af4746baf68ead35d182f4&EIO=3&transport=websocket&sid=61LGLpdw53xaMYqBAAJR' failed: Error during WebSocket handshake: Unexpected response code: 502

nginx也给出了下面的错误

[error] 15348#0: *84812 upstream prematurely closed connection while reading response header from upstream, client: 10.100.50.14, server: _, request: "GET /prod/socket.io/?session_id=nR0P30IDeUutoavDyjcqAQ8hUw_3l7dtAHQ3tqzW4zVT8eBOxwbHZq_7mWd9K7qRNO2Aq45QXm8w2KSvzyFlq3O4w7P2tl2q&id=955bb63a4f804b42b9d85ac8cf9172a7&EIO=3&transport=websocket&sid=xXGRnAsjKX6Gj-SAAAls HTTP/1.1", upstream: "http://127.0.0.1:3000/socket.io/?session_id=nR0P30IDeUutoavDyjcqAQ8hUw_3l7dtAHQ3tqzW4zVT8eBOxwbHZq_7mWd9K7qRNO2Aq45QXm8w2KSvzyFlq3O4w7P2tl2q&id=955bb63a4f804b42b9d85ac8cf9172a7&EIO=3&transport=websocket&sid=xXGRnAsjKX6Gj-SAAAls"

有人知道原因吗?

Nginx 配置:

proxy_pass http://lb-prod/; # Load balance the URL location "/" to the upstream lb1
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

【问题讨论】:

  • nginx 必须专门为 webSockets 配置才能正常工作。你这样做了吗?你可以在这里阅读:nginx.com/blog/websocket-nginx
  • 我相信我已经这样做了,我已经编辑了帖子以显示我的conf
  • 一些nginx指令here用于socket.io负载均衡。上面显示的内容不止于此。

标签: node.js azure nginx socket.io load-balancing


【解决方案1】:

这里的问题是关于会话粘性。将我的负载均衡器配置为使用 sticky session 解决了这个问题!

【讨论】:

    【解决方案2】:

    有一个来自 Nginx 官方网站的blog,这是使用 NGINX 和 NGINX Plus 与 Node.js 和 Socket.IO 的最佳实践。

    我觉得现在对你很有帮助。

    【讨论】:

      猜你喜欢
      • 2012-06-13
      • 2013-10-12
      • 1970-01-01
      • 2021-12-07
      • 2017-05-25
      • 2018-03-24
      • 2015-06-17
      • 2011-01-10
      • 1970-01-01
      相关资源
      最近更新 更多