繁体   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