我在 Tomcat 实例上建立了 3 场战争 - 这些战争正在以下地点进行:
我在同一台机器上安装了 Apache。我正在尝试设置 Apache,以便能够通过以下方式访问这 3 个 wars:
- http://war1.mycompany.com:9024/[是的,端口 9024]
- http://war2.mycompany.com:9024/
- http://war3.mycompany.com:9024/
我曾尝试按照示例同时使用 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”来检查实际流量,以确定出了什么问题。