我有几个socket.io实例,在HAProxy下运行身份验证,我需要强制认证请求和套接字连接转到同一个实例.我已经基于
this answer to a SO question设置了HAProxy并进行了一些修改,如下所示:
global maxconn 4096 # Total Max Connections. This is dependent on ulimit nbproc 2 defaults mode http frontend all 0.0.0.0:80 timeout client 86400000 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 url_param sessionId option forwardfor # This sets X-Forwarded-For timeout server 30000 timeout connect 4000 server server1 localhost:8081 weight 1 maxconn 1024 check server server2 localhost:8082 weight 1 maxconn 1024 check server server3 localhost:8083 weight 1 maxconn 1024 check backend socket_backend balance url_param sessionId option forwardfor # This sets X-Forwarded-For timeout queue 5000 timeout server 86400000 timeout connect 86400000 server server1 localhost:8081 weight 1 maxconn 1024 check server server2 localhost:8082 weight 1 maxconn 1024 check server server3 localhost:8083 weight 1 maxconn 1024 check
我已经尝试过url_param(其中sessionId是在身份验证调用和websocket连接中传递的查询字符串参数)和source作为余额选项,但似乎HAProxy只允许这些选项用于HTTP连接,因此忽略它们用于实际的websocket连接.结果是,有时auth请求和套接字连接最终在不同的服务器中,这对我们的应用程序来说是不可接受的.
是否有某种方法可以实现这种期望的行为?
解决方法
我以这种方式使用基于cookie的平衡:
backend socketio mode http cookie SIO insert server sock1 127.0.0.1:8001 cookie 001 server sock2 127.0.0.1:8002 cookie 002
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。