1

希望有人可以帮助我。

我正在使用 NodeJS v0.8.16 Socket.ID v0.9.13 和 HAProxy 1.5-dev17。

我的设置是在 Amazon AWS 上使用 VPC,HAProxy 在面向公众的实例上,NodeJS 在通常不可公开访问的单独实例上。我确实有一个IP地址用于测试。

我有一个测试设置,它登录到 NodeJS 服务器,然后通过 Socket.IO 打开一个经过身份验证的 websocket,会话详细信息保存在 Redis 中以在它们之间共享。一旦 websocket 连接成功,就会通过 NodeJS 发出一个请求,该请求会提示一个事件被发送回客户端。

当测试直接绕过 HAProxy 引用 NodeJS 实例时,此流程可以正常工作。当它通过 HAProxy 路由时,我从 Socket.IO 得到错误

“保留字段必须为空”和“无操作码处理程序”引用随机操作码

据我所知,Socket.IO 使用位掩码解析了一个初始字节,以确定请求的目的。通过 HAProxy 路由后,yhis 值现在不是预期值并引发这些错误。

我的 HAProxy 配置来自另一个 StackOverflow 问题HAProxy + WebSocket Disconnection

global
    maxconn     4096 # Total Max Connections. This is dependent on ulimit
    nbproc      2

defaults
    mode        http
    retries 3
    option redispatch
    option http-server-close


frontend all 0.0.0.0:3000
    timeout client 5000
    default_backend www_backend
    acl is_websocket hdr(Upgrade) -i WebSocket
    acl is_websocket hdr_beg(Host) -i ws

    use_backend socket_backend if is_websocket

backend www_backend
    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout server 5000
    timeout connect 4000
    server server 10.0.0.214:3000 weight 1 maxconn 1024 check

backend socket_backend
    balance roundrobin
    option forwardfor # This sets X-Forwarded-For
    timeout queue 5000
    timeout server 5000
    timeout connect 5000
    timeout tunnel 3600s
    timeout http-keep-alive 1s
    timeout http-request 15s
    server server1 10.0.0.214:3000 weight 1 maxconn 1024 check

我还尝试了其他各种 HAProxy 配置,但最终得到了相同的结果。

有没有人遇到过这个问题。我不确定我做错了什么。

4

0 回答 0