我正在使用一个使用websocket处理程序的Tornado应用程序.我正在使用Supervisord运行应用程序的多个实例,但是我无法平衡websocket连接.
我知道Nginx不支持处理开箱即用的websockets,但我按照http://www.letseehere.com/reverse-proxy-web-sockets中的说明使用Nginx tcp_proxy模块来反转代理websocket连接.但是,这不起作用,因为模块无法路由websocket url(例如:ws:// localhost:80 / something).所以它不适用于我在Tornado应用程序中定义的URL路由.
从我对网络的研究来看,似乎HAProxy是对我的websocket连接进行负载均衡的方法.但是,我很难找到任何体面的指导来设置HAProxy来加载平衡websocket连接,并且还能够处理websocket URL路由.
我真的很感激有关如何实现这一目标的一些详细指示.我也完全接受其他解决方案.
解决方法:
在haproxy中实现WebSocket并不困难,不过我承认在这方面找到doc并不容易(希望这个响应会成为一个例子).如果您正在使用haproxy 1.4(我认为您是这样),那么它就像任何其他HTTP请求一样,无需执行任何操作,因为haproxy可以识别HTTP升级.
如果要将WebSocket流量定向到与其余HTTP不同的服务器场,则应使用内容切换规则,简而言之:
frontend pub-srv bind :80 use_backend websocket if { hdr(Upgrade) -i WebSocket } default_backend http backend websocket timeout server 600s server node1 1.1.1.1:8080 check server node2 2.2.2.2:8080 check backend http timeout server 30s server www1 1.1.1.1:80 check server www2 2.2.2.2:80 check
如果您使用的是1.5-dev,您甚至可以指定“超时隧道”以使WS连接的超时比正常的HTTP连接更长,这样可以避免在客户端使用过长的超时.
您还可以将Upgrade:WebSocket组合成一个特定的URL:
frontend pub-srv bind :80 acl is_websocket hdr(Upgrade) -i WebSocket acl is_ws_url path /something1 /something2 /something3 use_backend websocket if is_websocket is_ws_url default_backend http
最后,请不要使用我们有时看到的愚蠢的24小时空闲超时,它绝对没有
现在就建立会议等待客户24小时的感觉.网络更多
移动比80年代和连接都非常短暂.你最终会得到许多FIN_WAIT套接字
徒劳无功.目前的互联网已经有10分钟了.
希望这有帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。