首页 > 解决方案 > Apache 使用 websocket 进行负载平衡

问题描述

我们希望在 KVM 上侦听不同端口的两个进程之间对请求进行负载平衡。

当我将 URL 直接放在 RewriteRule 中而不进行负载平衡时,一切似乎都正常。所以我认为我的配置有问题。

我的配置是:

<IfModule mod_ssl.c> 
    <virtualHost :443>
    ServerName super.secret.domain

    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    <Proxy balancer://httprewrite>
            BalancerMember http://192.168.122.83:81/$1 route=1
            BalancerMember http://192.168.122.83:80/$1 route=2
            ProxySet stickysession=ROUTEID
    </Proxy>

    <Proxy balancer://wsrewrite>
            BalancerMember ws://192.168.122.83:81/$1 route=1
            BalancerMember ws://192.168.122.83:80/$1 route=2
            ProxySet stickysession=ROUTEID
    </Proxy>

    RewriteEngine On
    RewriteCond %{HTTP:Upgrade} =websocket [NC]
    RewriteRule /(.) balancer://wsrewrite/ [P,L] 

    RewriteCond %{HTTP:Upgrade} !=websocket [NC] 
    RewriteRule /(.*) balancer://httprewrite/ [P,L] 

    SSLCertificateFile /etc/letsencrypt/live/super.secret.domain/cert.pem 
    SSLCertificateKeyFile /etc/letsencrypt/live/super.secret.domain/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf
    SSLCertificateChainFile /etc/letsencrypt/live/super.secret.domain/chain.pem 
    </virtualHost>
</IfModule>

有些部分正在加载其他部分没有。例如https://super.secret.domain/favicon.ico给出 404 错误。

标签: apacheload-balancing

解决方案


推荐阅读