如何确保通过 Apache(代理传递 - 端口 80)和 tomcat(端口 8080)访问 Web 应用程序时上下文路径相同?

如何确保通过 Apache(代理传递 - 端口 80)和 tomcat(端口 8080)访问 Web 应用程序时上下文路径相同?

我用 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 上询问了这个问题,但被指向这里......

https://stackoverflow.com/questions/15736198/how-do-i-ensure-the-context-path-is-the-same-when-accessing-a-web-app-via-apache

编辑

正如下面的评论中提到的,我正在设置一个域名,并希望我的域名加载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

相关内容