我需要以下拓扑的负载均衡器配置,我测试了以下配置,但“myappcluster1”部分始终在运行。我无法在部分内附加 ProxyPass,它给出错误“>>ProxyPass 不能在部分内发生”。我在 Windows 2012R2 上使用 Apache httpd-2.4.29-x64-vc11-r3。如何做到这一点,谢谢
<IfModule proxy_ajp_module>
<Proxy balancer://myappcluster1>
BalancerMember ajp://Server1:8009 route=myapp1
BalancerMember ajp://Server2:8009 route=myapp2
BalancerMember ajp://Server3:8009 route=myapp3
</Proxy>
<Proxy balancer://myappcluster2>
BalancerMember ajp://Server4:8009 route=myapp4
BalancerMember ajp://Server5:8009 route=myapp5
</Proxy>
<Location "/myapp">
# I tried these
# <If "%{REMOTE_ADDR} -ipmatch '172.16.0.11'">
# <If "-R '172.16.0.0/24'">
<If "-R '172.16.0.11'">
define clustername myappcluster2
ProxyPass balancer://${clustername}/
</If>
<Else>
define clustername myappcluster1
</Else>
ProxyPass balancer://${clustername}/
</Location>
答案1
你无法定义 ProxyPass指令如果指令。
因此,对于这种情况,您可能需要改用 mod_rewrite。另外,无需使用 Location。
更改整个位置以执行您要的操作,在虚拟主机中定义它,它看起来比您刚才尝试的更简单:
RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^172\.16\.0\.11
RewriteRule ^/myapp/(.*) balancer://myappcluster2/$1 [P,L]
RewriteRule ^/myapp/(.*) balancer://myappcluster1/$1 [P,L]
解释,如果条件匹配则使用 cluster2,否则使用 cluster1。根据需要进行调整。
笔记:您可能需要稍后添加几个 ProxyPassReverse 条目,具体取决于后端发送重定向是否需要更改。