1

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,但该指令根本无法访问端口号(为什么?)。

当前的工作解决方案是创建三个不同的虚拟主机并硬编码端口号,但我不喜欢它。

4

0 回答 0