Назад | Перейти на главную страницу

Прикрепленные сеансы с балансировщиком нагрузки Apache для Socket.io 1.0

Я возился с Apache в качестве балансировщика нагрузки для моего сервера Socket.io. Я просмотрел следующую тему, и теперь вроде все в порядке.

Настройка Apache 2.4 mod_proxy_wstunnel для Socket.IO 1.0

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