我正在尝试在端口 80 上运行 webserver 和 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
我正在使用谷歌浏览器进行测试。在某些机器上我连接得很好,在其他机器上它会给我一个 502 错误并且 em-websocket 记录这个错误:
#<EventMachine::WebSocket::HandshakeError: Connection and Upgrade headers required>
如果我停止运行代理并在端口 80 上运行 Web 套接字服务器,它工作正常,这对我来说表明问题出在代理上。我在某处读到 HAProxy 在处理 websockets 时不应在 http 模式下运行,因为升级数据包不是有效的 HTTP,这可能与我看到的问题有关吗?