Socket.io 1.0 の Apache ロードバランサによるスティッキーセッション

Socket.io 1.0 の Apache ロードバランサによるスティッキーセッション

私は 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>

関連情報