私は Socket.io サーバーのロード バランサーとして Apache を試しています。次のトピックを確認しましたが、今はすべて問題ないようです。
Socket.IO 1.0 用の Apache 2.4 mod_proxy_wstunnel の設定
次の構成を使用して Apache を構成し、接続が WebSocket にアップグレードされるようになりました。ただし、次の構成でスティッキー セッションを有効にしようとすると、ポーリングがルート #1 で確立されている間に、Apache がアップグレード要求をルート #2 にルーティングすることがあるようです。これが発生すると、アップグレードは失敗し、WebSocket は接続されません。バランサーが 2 つ (http 用と ws 用) あるため、http ルート #1 によって設定された Cookie は ws ルートからアクセスできず、それが http と ws 間のセッションがスティッキーでない理由ではないかと考えました。
私はApache 2.4.9を使用しています
<VirtualHost *:8080>
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
ProxyRequests off
ServerName localhost
<Proxy balancer://http-localhost/>
BalancerMember http://localhost:8081 route=1 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
BalancerMember http://localhost:8082 route=2 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID
</Proxy>
<Proxy balancer://ws-localhost/>
BalancerMember ws://localhost:8081 route=1 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
BalancerMember ws://localhost:8082 route=2 keepalive=On smax=1 connectiontimeout=10 retry=600 timeout=900 ttl=900
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID
</Proxy>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) balancer://ws-localhost/$1 [P,L]
ProxyPass /socket.io balancer://http-localhost/socket.io
ProxyPassReverse /socket.io balancer://http-localhost/socket.io
</VirtualHost>