Я возился с Apache в качестве балансировщика нагрузки для моего сервера Socket.io. Я просмотрел следующую тему, и теперь все, кажется, в порядке.
Настройка Apache 2.4 mod_proxy_wstunnel для Socket.IO 1.0
Я настроил Apache, используя следующую конфигурацию, и теперь соединения обновляются до WebSocket. Но когда я пытаюсь включить липкие сеансы для следующей конфигурации, кажется, что иногда apache направляет запрос на обновление на маршрут № 2, в то время как опрос был установлен на маршруте № 1. Когда это происходит, обновление не выполняется, и веб-сокет не подключается. Поскольку у нас есть два балансировщика (один для http и один для ws), я подумал, что, возможно, cookie, установленный http route № 1, не может быть доступен для 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>