因此,我在使用HAProxy在端口8888上负载均衡socket.io时遇到问题。我的设置是NGINX侦听端口80,并在端口80上运行的Tornado Web服务器实例之间进行负载平衡。然后,在同一负载均衡器上,我有一个HAProxy实例侦听端口8888,将请求转发到托管TornadIO的网络中的OTHER计算机服务器实例也在8888上运行。连接在前30秒左右工作,然后开始重复断开/重新连接。重要的是要注意到它似乎在第一次心跳尝试时中断了...心跳是一个不同的协议,HAProxy会遇到麻烦而不是第一次连接尝试/最初几次消息交换?
有趣的是,当tornadIO实例与负载均衡器在同一台计算机上运行时,即使HAProxy正常工作(但连接端口8888,让端口9000上的tornadIO实例),也不会发生这种情况。
重要的是要注意TornadIO在整个过程中不会抛出任何异常或任何沮丧的输出,表明它不是我的服务器代码而是代理层中的某些东西?
让我们知道我正在使用RabbitMQ来同步所有TonadIO集群,而不是我认为它很重要(而且HAProxy不会触及Rabbit)
这是我的HAProxy设置:
global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen http-in
balance roundrobin
option forwardfor # This sets X-Forwarded-For
timeout queue 5000
timeout server 86400000
timeout connect 86400000
bind *:8888
server server1 18.181.3.164:8888 # ether1
在我的nginx配置中,我插入了:
location ~* \.(eot|ttf|woff)$ {
add_header Access-Control-Allow-Origin *;
}
确保它不是访问控制问题(控制台不说它,所以它不应该)。
我也尝试过添加
option http-server-close
option http-pretend-keepalive
到我的HAProxy配置,但无济于事。
有什么想法吗?
**我在Chrome 9.0.597和Firefox 3.6中测试(所以使用两个网络套接字,没有,同样的事情)
答案 0 :(得分:2)
我不知道这个设置中涉及的其他组件,但是上次我检查(几个月前),nginx还不支持WebSocket使用的Upgrade + 101 HTTP机制。那么也许你的测试工作直到连接升级?你肯定应该启用haproxy的登录,你知道连接关闭的地方和原因。顺便说一下,升级到1.4.13将解决一些日志问题,这些问题将帮助您更加确定地进行故障排除。