我有幾個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上的任何用戶? –