【问题标题】:haproxy and socket.io not fully workinghaproxy 和 socket.io 无法正常工作
【发布时间】:2012-01-29 13:08:51
【问题描述】:

我已经尝试了在博客和 stackoverflow 中发布的所有可能的 haproxy 配置,但我仍然无法让 haproxy 和 socket.io 100% 地工作。在大多数“支持”网络套接字的浏览器中,它会失败并在错过心跳后退回到长轮询。浏览器似乎建立了初始连接(nodejs 调试),但我无法让客户端接收连接响应。其他人有类似的问题吗?以下是我尝试过的软件版本号和一些配置。

  • haproxy 1.4.18
  • 节点 0.6.5
  • socket.io 0.8.7

Haproxy 配置(我已经尝试了很多很多选项):

Web 套接字工作于:

  • Safari 5 (Windows)
  • Chrome 11 (Linux)

【问题讨论】:

  • 我从等式中删除了 haproxy,并且 socket.io 可以完美运行,所以我的 haproxy 配置一定有问题,或者由于某种原因两者不能再很好地协同工作。
  • 如果我在 socket.io 切换协议之前停止 haproxy,那么连接上的 Web 套接字消息将发送到客户端。我现在使用link 进行配置。
  • 我花了很多时间尝试获得正确的 haproxy 配置。就我而言,我希望 web 和 flash 套接字通过,但没有其他传输。我还想在 haproxy 终止 ssl。已经有一段时间了,您可能已经解决了这个问题。但是,我在博客中介绍了我的解决方案:blog.carbonfive.com/2013/05/02/…Cheers, Christian

标签: websocket socket.io haproxy


【解决方案1】:

Websockets 不能进行反向代理,因为客户端必须在标头之后发送的 8 字节数据未在 Content-Length 标头中公布,因此中间体在握手完成之前不会转发该数据。而且由于握手需要这 8 个字节才能完成,所以握手永远不会完成并死锁,http://www.enotes.com/topic/WebSockets#Proxy_traversal。这不是唯一的来源。更多来源证实它们不能被反向代理。

【讨论】:

  • 这一点完全错误,与最初的 websocket 草案有关,它与 HTTP 不兼容。 WebSocket 可以被反向代理,因为它变得兼容 HTTP。
猜你喜欢
  • 2016-11-26
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2017-08-17
相关资源
最近更新 更多