1

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

4

2 回答 2

1

我现在使用端口 443。将来我将在单独的服务器上运行 Web 套接字来解决这个问题。

于 2012-07-02T00:36:16.837 回答
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

如果您有多个服务器来保持与同一服务器的套接字连接,源平衡很重要。

于 2012-06-12T13:21:22.240 回答