Ruby websocket、em websocket和;HAProxy 502错误
我正在尝试在端口80上运行webserver和websocket服务器。为此,我使用HAProxy使用以下配置路由连接:Ruby websocket、em websocket和;HAProxy 502错误,ruby,websocket,eventmachine,em-websocket,Ruby,Websocket,Eventmachine,Em Websocket,我正在尝试在端口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 timeou
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套接字服务器,它工作正常,这对我来说表明问题出在代理上。我在某个地方读到,当处理WebSocket时,HAProxy不应该在http模式下运行,因为升级包不是有效的http,这可能与我看到的问题有关吗?是的,尝试切换到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
如果有多台服务器保持与同一台服务器的套接字连接,则源平衡非常重要。是的,请尝试切换到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
如果您有多台服务器来保持与同一台服务器的套接字连接,那么源平衡非常重要。我现在使用的是端口443。将来,我将在一个单独的服务器上运行web套接字来解决这个问题。我现在使用端口443。将来,我将在一个单独的服务器上运行web套接字来解决这个问题。谢谢@v1rtual。我不知道余额来源。不幸的是,我试图在端口80上同时运行web服务器和web套接字服务器,希望web套接字不会被严格的防火墙阻止。好的,那么您必须将端口80前端更改为tcp模式,以便em websocket正常工作。您的hdr检查将不再有效。socket.io似乎在http模式下工作:谢谢@v1rtual。我不知道余额来源。不幸的是,我试图在端口80上同时运行web服务器和web套接字服务器,希望web套接字不会被严格的防火墙阻止。好的,那么您必须将端口80前端更改为tcp模式,以便em websocket正常工作。您的hdr检查将不再有效。socket.io似乎在http模式下工作: