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>
上記の構成では、物理的な apache ポート番号の代わりに<xx>
使用する必要があります。この場合、80、81、または 82 です。
使ってみ%{SERVER_PORT}
ましたが、決して物理ポートではありません。の場合はUseCanonicalName Off
、ロード バランサーのポートです (私の例では 443)。の場合はUseCanonicalName On
、Apache 構成で構成されたポートの 1 つです。私の場合、それは常に82でした。
UseCanonicalPhysicalPort On|Off
ディレクティブは、理論的にはこの問題を解決するように設計されていますが、仮想ホストの構成には十分な柔軟性がないようです。
http://httpd.apache.org/docs/current/mod/core.html#usecanonicalphysicalport
SERVER_PORT
としてCGI変数にアクセスしようとしまし%{ENV:SERVER_PORT}
たが、存在しませんでした。
を使用して問題を回避しようとしましたSetEnvIf
が、このディレクティブはポート番号にまったくアクセスできません (なぜですか?)。
現在の作業ソリューションは、3 つの異なる仮想ホストを作成し、ポート番号をハードコードすることでしたが、私はそれが好きではありません。