这可能是一个简单的问题,但我似乎无法解决它!我有一个网站在不同的端口(例如 8080、8085)上运行 2 个 Apache Tomcat。但是,由于我的客户无法访问特定端口(他们的防火墙阻止了这一点),他们只能从端口 80 访问我的机器。
因此我让以下重定向起作用:
aServer.com/App1 redirects to aServer.com:8080/App1
aServer.com/App2 redirects to aServer.com:8085/App2
使用以下 httpd.conf 文件:
<VirtualHost *:80>
ProxyPass /App1 http://<server ip address>:8080/App1
ProxyPassReverse /App1 http://<server ip address>:8080/App1
ProxyPass /App2 http://<server ip address>:8085/App2
ProxyPassReverse /App2 http://<server ip address>:8085/App2
</VirtualHost>
但是,如果我想在 Tomcat 中将应用程序部署为 ROOT webapp,则无法使重定向正常工作。我将 httpd.conf 修改为:
ProxyPass /App2 http://<server ip address>:8085
ProxyPassReverse /App2 http://<server ip address>:8085
现在仅返回 index.html 页面,并且网页中的每个依赖项(例如 tomcat.css、tomcat.png)都会导致未找到错误(
NetworkError: 404 Not Found - http://myServer/tomcat.css
)
谁能解释我做错了什么?
谢谢,
菲尔
答案1
除非您的应用程序明确支持代理,否则通常需要将代理路径与上下文路径进行匹配。
http://myserver/tomcat.css
是一个将尝试在您的 Apache 文档根目录上实现的请求,因为/
未代理到 Tomcat。您需要执行以下任一操作(选项范围从安全到惰性):
将 Apache 根目录代理到 Tomcat 根目录,
如果你不打算在同一个容器中运行这两个应用程序,请确保以正确的顺序放置 ProxyPass 指令修改 Tomcat 中的原始
index.html
页面,以考虑代理引起的路径变化,
每次重新部署时,您都必须重做此操作。为代理路径中的所有资源提供重写
每次重新部署改变所需资源时,您都必须重做此操作。