Apache VirtualHost 和 ModProxy 无法按预期工作

Apache VirtualHost 和 ModProxy 无法按预期工作

我在 Tomcat 实例上建立了 3 场战争 - 这些战争正在以下地点进行:

我在同一台机器上安装了 Apache。我正在尝试设置 Apache,以便能够通过以下方式访问这 3 个 wars:

我曾尝试按照示例同时使用 Virtual_Host 和 mod_proxy,但它无法正常工作。当我访问http://war1.mycompany.com/浏览器会收到302一个http://war1.mycompany.com/war1/而这又会导致400错误。

如果我访问http://war1.mycompany.com:9023/war1(即直接查询 Tomcat)然后我得到了我期望的站点,因此 DNS 设置正确,并且 war 已正确部署。

我的 Apache 配置文件(/etc/httpd/conf.d/sites.conf)如下:

Listen 9024
<VirtualHost *:9024>
    ServerAdmin [email protected]
    ServerName war1.mycompany.com
    ErrorLog logs/error_log
    CustomLog logs/access_log common
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:9023/war1
    ProxyPassReverse / http://127.0.0.1:9023/war1
</VirtualHost>

我正在使用 Apache 2.2.3 和 Tomcat 6.0.14。Tomcat 的配置基本正常:

<Host name="localhost"  appBase="webapps"
    unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/>
</Host>

战争发生在CATALINA_HOME/webapps/war1.war等等。

我做错了什么?我应该在主 Apache 配置中寻找什么吗?

答案1

快速编辑:顺便问一下,您确定是 Apache 给您错误 400 吗?使用“curl -v”并检查标头流量以确保是 Apache 发出了 400 错误。

嗯,它看起来对。你有“NameVirtualHost”:9024" 在你的配置中?你确定 mod_proxy模块实际上是通过某处 LoadModule 启用的吗?

尝试使用替代方法:

<Location />
  ProxyRequests Off
  ProxyPreserveHost On
  ProxyPass http://127.0.0.1:9023/war1
  ProxyPassReverse http://127.0.0.1:9023/war1
  #
  # Perhaps your Tomcat is HTTP/1.1 buggy?
  SetEnv force-proxy-request-1.0 1
  SetEnv proxy-nokeepalive 1
</Location>

我建议设置您的“LogLevel debug”来检查实际流量,以确定出了什么问题。

相关内容