Websockets,em-websocket& HAProxy 502错误

时间:2012-06-11 05:14:21

标签: ruby websocket eventmachine em-websocket

我正在尝试在端口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,这可能与我看到的问题有关吗?

2 个答案:

答案 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

如果您有多个服务器来保持套接字连接到同一服务器,则源平衡非常重要。