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