
我已經配置了一個基礎設施設置,其中 apache 反向代理終止 SSL 請求。然後請求被代理到另一個前端 apache web 伺服器,然後再次透過 mod_jk/AJP 連接到 tomcat。該設置似乎運行順利,沒有任何異常。 tomcat 提供 WSDL Web 服務,並且在這些 XML 檔案中,一個標籤包含主機位置,該位置應與要求的 URL 相同。
由於目前的設置,主機位置代表(ajp 連接的)前端 Web 伺服器的內部 URL,而不是請求的外部 URL。解決此問題的第一個嘗試是將外部 URL 設定為 tomcats server.xml 中的代理 URL,但此方法無法識別 HTTP 或 HTTPS 請求。我必須確定一個。
此外,目前還可以透過具有完全其他 URL 的其他前端伺服器存取這些服務(更簡單的設置,無需反向代理)。
我希望我所描述的問題是可以理解的。如何讓 tomcat 知道請求的 URL 或我應該將請求的 URL 傳遞給前端 apache?我現在有點卡住了。
提前致謝。
/編輯
請求序列的簡短概述:
**customerX** -- REQUEST HTTP|HTTPS -- **host.external/customerX** -- PASS HTTP -- **customerX.internal** -- AJP -- **tomcat**
ProxyPreserveHost 打開沒有成功,因為它將 host.external 傳遞給前端 apache,並且沒有與此虛擬主機匹配的虛擬主機,這會導致 404 錯誤 - 不言自明的。
配置一點也不特別。外部可存取的反向代理有 2 個虛擬主機 (HTTP|HTTPS)。兩個虛擬主機都知道我們透過上下文 /customerX、/customerY 等提供服務的每個客戶。例如HTTP虛擬主機:
<VirtualHost *:80>
ServerName host.external
ProxyPass /customerX http://customerX.internal
ProxyPassReverse /customerX http://customerX.internal
ProxyPass /customerY http://customerY.internal
ProxyPassReverse /customerY http://customerY.internal
...
</VirtualHost>
我知道,第二行是隱含的。
在第二個 apache 上,每個客戶都有一個虛擬主機(僅限 HTTP),具有相應的伺服器名稱和 tomcats webapps 所需的 JkMounts:
<VirtualHost *:80>
ServerName customerX.internal
JkMount ...
</VirtualHost>