我正在尝试在端口80上运行Web服务器和websocket服务器。为此,我使用HAProxy来使用此配置路由连接:
global
maxconn 4096 # Total Max Connections. This is dependent on ulimit
nbproc 1
ulimit-n 65536
defaults
mode http
frontend all 0.0.0.0:80
timeout client 86400000
acl is_websocket hdr_beg(host) -i live
acl is_websocket hdr(Upgrade) -i WebSocket
default_backend www_backend
use_backend production_socket_backend if is_websocket
backend www_backend
balance roundrobin
option forwardfor # This sets X-Forwarded-For
timeout server 30000
timeout connect 4000
server appserver 127.0.0.1:81 weight 1 maxconn 1024
backend production_socket_backend
balance roundrobin
option forwardfor # This sets X-Forwarded-For
timeout queue 5000
timeout server 86400000
timeout connect 86400000
server appserver 127.0.0.1:8083 weight 1 maxconn 1024
我正在使用Google Chrome进行测试。在某些机器上,我连接正常,在其他机器上,它会给我一个502错误,em-websocket记录这个错误:
#<EventMachine::WebSocket::HandshakeError: Connection and Upgrade headers required>
如果我停止运行代理并在端口80上运行Web套接字服务器,它可以正常工作,这表明问题在于代理。我在某处读过HAProxy在处理websockets时不应该以http模式运行,因为升级数据包不是有效的HTTP,这可能与我看到的问题有关吗?
答案 0 :(得分:1)
我现在正在使用443端口。将来我会在一个单独的服务器上运行Web套接字来解决这个问题。
答案 1 :(得分:0)
是的,尝试更改为tcp模式。
我不确定带头检查的转发内容是否有效。我把插座放在专用端口上。
listen websockets
mode tcp
bind *:8000
balance source
timeout queue 5000
timeout server 86400000
timeout connect 86400000
server thin_web1 x.x.x.x:8000
如果您有多个服务器来保持套接字连接到同一服务器,则源平衡非常重要。