Sesiones fijas con el equilibrador de carga Apache para Socket.io 1.0

Sesiones fijas con el equilibrador de carga Apache para Socket.io 1.0

He estado jugando con Apache como equilibrador de carga para mi servidor Socket.io. Revisé el siguiente tema y ahora todo parece estar bien.

Configuración de Apache 2.4 mod_proxy_wstunnel para Socket.IO 1.0

Configuré Apache usando la siguiente configuración y ahora las conexiones se están actualizando a WebSocket. Pero cuando intento habilitar sesiones fijas para la siguiente configuración, parece que a veces Apache enruta la solicitud de actualización a la ruta n.° 2 mientras el sondeo se estableció en la ruta n.° 1. Cuando esto sucede, la actualización falla y websocket no está conectado. Dado que tenemos equilibradores (uno para http y otro para ws), pensé que tal vez las rutas ws no puedan acceder a la cookie establecida por la ruta http n.° 1 y es por eso que las sesiones no son fijas entre http y ws.

Estoy usando 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>

información relacionada