Ruby websocket、em websocket和;HAProxy 502错误

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

我正在尝试在端口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套接字服务器,它工作正常,这对我来说表明问题出在代理上。我在某个地方读到,当处理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模式下工作: