我用 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