[英]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.