2我有以下配置:
---443-> Load-Balancer-1 ---80> Apache-Proxy ---8080> Tomcat
---443-> Load-Balancer-2 ---81> Apache-Proxy ---8081> Tomcat
---443-> Load-Balancer-3 ---82> Apache-Proxy ---8082> Tomcat
Apache 服务器中有几个条目通过不同的端口 80、81、81。每个 Apache 端口都有一个 Tomcat 侦听端口。这是简化的配置:
<VirtualHost *:80 *:81 *:82>
RewriteRule ^/(.*) ://localhost:80<xx>/$1 [P,L]
</VirtualHost>
在上面的配置中,<xx>
必须使用物理 apache 端口号而不是。在这种情况下为 80、81 或 82。
我尝试使用%{SERVER_PORT}
,但它从来都不是物理端口。如果是UseCanonicalName Off
,则它是负载均衡器的端口(在我的示例中为 443)。如果是UseCanonicalName On
,则它是 Apache 配置中配置的端口之一。在我的情况下,它总是82。
UseCanonicalPhysicalPort On|Off
指令理论上是为了解决这个问题而设计的,但是对于虚拟主机配置来说似乎不够灵活。
http://httpd.apache.org/docs/current/mod/core.html#usecanonicalphysicalport
我试图访问 CGI 变量SERVER_PORT
,%{ENV:SERVER_PORT}
但它不存在。
我尝试使用 解决此问题SetEnvIf
,但该指令根本无法访问端口号(为什么?)。
当前的工作解决方案是创建三个不同的虚拟主机并硬编码端口号,但我不喜欢它。