我有几个socket.io实例在HAProxy下运行身份验证,我需要强制认证请求和套接字连接去同一个实例。我已经设置了HAProxy的基础上this answer to a SO question有一些修改为这样:我可以通过身份验证与HAProxy和socket.io进行粘性会话吗?
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连接传递一个查询字符串参数)和源作为平衡选项,但似乎HAProxy只允许HTTP连接的这些选项,因此忽略它们以用于实际的websocket连接。其结果是,有时认证请求和套接字连接最终会在不同的服务器中出现,这对我们的应用程序来说是不可接受的。
有没有某种方法来获得这种理想的行为?
你有没有想过最好的方法来做到这一点?我期待着做同样的事情。谢谢。 –
我结束了使用IP哈希平衡。所有来自同一个IP的请求都会转到同一台服务器 – Diego
O ok,但这是否意味着从服务器A上的用户广播的websocket不会到达服务器B上的任何用户? –