簡體   English   中英

Tomcat server.xml 不適用於多個主機

[英]Tomcat server.xml not working for multiple hosts

我將請求從 Apache 轉發到 Tomcat。

<Server>
<Service>
    <Connector port="8222" protocol="HTTP/1.1" proxyPort="80" />

   <Engine name="Catalina" defaultHost="www.AAA.com">
            <Host name="www.AAA.com">
                 <Context path="/path" docBase="aaa"></Context>
            </Host>

            <Host name="www.BBB.com">
                 <Context path="/path" docBase="bbb"></Context>
            </Host>
   </Engine>
</Service>
</Server>

通過 Apache 的請求 - 僅適用於在 Engine 元素的 defaultHost 屬性中設置的域。

如果我將 defaultHost 設置為域 BBB,那么第二個主機 url 工作。

這幾乎就像 Tomcat 沒有收到原始域名並且無法確定目標域,因此使用默認值。

我通過 Apache mod_proxy 轉發請求,並且根據我設置 defaultHost 的方式接收請求。

這是我的代理命令

ProxyPass         /path http://localhost:8222/path
ProxyPassReverse  /path http://localhost:8222/path

我檢查了訪問日志和請求(甚至是非工作請求)正在到達 Tomcat。

我檢查了 Tomcat 收到的 x-forwarded-host 和 x-forwarded-server 標頭,它們在“www”和沒有分別...以及使用的域名時都是正確的。

我認為 Tomcat 應該能夠找到具有該信息的正確主機。

您正在尋找的是ProxyPreserveHost指令,它在對代理服務器的請求中使用原始請求的Host header:

ProxyPreserveHost On

使用默認配置, Host header 設置為ProxyPass指令中寫入的任何內容。 在您的情況下,它是localhost並且由於 Tomcat 沒有該名稱的Host ,因此請求將轉發到默認主機。

備注:在您的情況下,使用mod_proxy_ajp並在 Tomcat 上打開 AJP 連接器會更容易。 使用 AJP Tomcat 將接收(默認情況下)原始請求的所有信息(IP 地址、主機名、服務器端口、使用的協議等),而使用 HTTP 您需要RemoteIpValve之類的東西來檢索 Z8F742E28063C3047 信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM