Ich habe mit Apache als Load Balancer für meinen Socket.io-Server herumgespielt. Ich habe das folgende Thema durchgearbeitet und jetzt scheint alles in Ordnung zu sein.
Konfigurieren von Apache 2.4 mod_proxy_wstunnel für Socket.IO 1.0
Ich habe Apache mit der folgenden Konfiguration konfiguriert und jetzt werden die Verbindungen auf WebSocket aktualisiert. Aber wenn ich versuche, Sticky Sessions für die folgende Konfiguration zu aktivieren, scheint es, als ob Apache die Upgrade-Anforderung manchmal an Route Nr. 2 weiterleitet, während die Abfrage auf Route Nr. 1 eingerichtet wurde. Wenn dies geschieht, schlägt das Upgrade fehl und WebSocket wird nicht verbunden. Da wir Balancer haben (einen für http und einen für ws), dachte ich, dass das von der http-Route Nr. 1 gesetzte Cookie vielleicht nicht von ws-Routen abgerufen werden kann und dass deshalb Sitzungen zwischen http und ws nicht sticky sind.
Ich verwende 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>