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으로 업그레이드되고 있습니다. 그러나 다음 구성에 대해 고정 세션을 활성화하려고 하면 때때로 Apache가 경로 #1에서 폴링이 설정된 동안 업그레이드 요청을 경로 #2로 라우팅하는 것처럼 보입니다. 이 경우 업그레이드가 실패하고 웹소켓이 연결되지 않습니다. 우리는 밸런서(http용 하나, ws용 하나)가 필요하기 때문에 아마도 http 경로 #1에 의해 설정된 쿠키가 ws 경로에서 액세스될 수 없으며 이것이 세션이 http와 ws 사이에 고정되지 않는 이유라고 생각했습니다.

나는 아파치 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>

관련 정보