У меня есть несколько экземпляров socket.io с аутентификацией, работающей под HAProxy, и мне нужно заставить запрос аутентификации и соединение с сокетом идти к одному и тому же экземпляру.Я настроил HAProxy на основе этого ответа на вопрос SO с некоторыми изменениями следующим образом:
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 - параметр строки запроса, передаваемый в обоихвызов аутентификации и соединение веб-сокета) и источник в качестве параметров баланса, но кажется, что HAProxy разрешает эти параметры только для соединений HTTP и игнорирует их для фактического соединения веб-сокета.В результате иногда запрос на аутентификацию и подключение к сокету оказываются на разных серверах, что неприемлемо для нашего приложения.
Есть ли какой-нибудь способ получить такое желаемое поведение?