![如何确保通过 Apache(代理传递 - 端口 80)和 tomcat(端口 8080)访问 Web 应用程序时上下文路径相同?](https://linux22.com/image/609026/%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E9%80%9A%E8%BF%87%20Apache%EF%BC%88%E4%BB%A3%E7%90%86%E4%BC%A0%E9%80%92%20-%20%E7%AB%AF%E5%8F%A3%2080%EF%BC%89%E5%92%8C%20tomcat%EF%BC%88%E7%AB%AF%E5%8F%A3%208080%EF%BC%89%E8%AE%BF%E9%97%AE%20Web%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%97%B6%E4%B8%8A%E4%B8%8B%E6%96%87%E8%B7%AF%E5%BE%84%E7%9B%B8%E5%90%8C%EF%BC%9F.png)
我用 Java/J2EE 编写了一个 Web 应用程序,并使用 apache(ec2 微实例)部署它以转发来自端口 80到端口 8080(同一台机器)。我的httpd配置文件如下所示:
<VirtualHost *:80>
ServerName localhost
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/WEBAPP/
ProxyPassReverse / http://localhost:8080/WEBAPP/
</VirtualHost>
问题是,当我<%=request.getContextPath()%>
在资源(url、图像路径、js 文件等)前面添加内容时,当我从端口 80 或 8080 访问我的应用程序时,它会在前面添加相同的内容。现在,当我从端口 80 访问我的应用程序时,我的所有链接都乱了套,我的 JS、css 或 url 都无法工作。
此外,我可能完全错误地设置了我的网络应用程序,因此,如果能得到任何更好的设置建议,我将不胜感激。
在 stack overflow 上询问了这个问题,但被指向这里......
编辑
正如下面的评论中提到的,我正在设置一个域名,并希望我的域名加载mydomain.com:8080/WEBAPP当我访问 mydomain.com 时。我不确定重定向是否正确,因为我不想直接将用户发送到mydomain.com/WEBAPP(这是一个简单的解决方法)我希望 URL 看起来不错并且直观,而不仅仅是将用户重定向到任何地方。此外,我还试图避免在访问我的资源(imgs、css、js 等)时使用相对路径,以便我可以从 servlet 转发/重定向用户或直接访问 jsp,并且无论 URL 中实际显示的内容如何,路径都是正确的。
希望这是更好的解释。如果我上面没有说清楚,请再次抱歉。
答案1
您应该修复您的配置:
<VirtualHost *:80>
ServerName localhost
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass /WEBAPP http://localhost:8080/WEBAPP/
ProxyPassReverse /WEBAPP http://localhost:8080/WEBAPP/
</VirtualHost>
附加选项是
<VirtualHost *:80>
ServerName localhost
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPreserveHost On
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
澄清:从安全角度来看,最好为每个应用程序添加重定向(第一个选项)。在这种情况下,所有不适当的请求都将在 Apache 处被阻止,并且不会到达 Tomcat