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>