Apache-2.2

通過 Apache(代理通行證 - 埠 80)和 tomcat(埠 8080)訪問 Web 應用程序時,如何確保上下文路徑相同?

  • April 1, 2013

我已經用 Java/J2EE 編寫了一個 Web 應用程序,並正在使用 apache(ec2 微實例)部署它以將請求從埠 80轉發到埠 8080(同一台機器)。我的httpd.conf如下所示:

<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 都不起作用。

此外,我可能正在完全錯誤地設置我的網路應用程序,因此任何更好地設置它的建議將不勝感激。

在堆棧溢出時問這個問題,但在這裡被指出……

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

編輯

正如下面評論中提到的,我正在設置一個域名,並希望mydomain.com在我訪問 mydomain.com 時載入mydomain.com:8080/WEBAPP 。我不確定重定向是正確的答案,因為我不想只是將使用者發送到mydomain.com/WEBAPP(這是一個簡單的解決方法)我希望 URL 看起來不錯並且直覺,而不僅僅是重定向使用者到處。此外,我試圖避免在訪問我的資源(imgs、css、js 等)時使用相對路徑,以便我可以從 servlet 轉發/重定向使用者或直接訪問 jsp,並且無論什麼是正確的路徑實際顯示在 URL 中。

希望這是一個更好的解釋。如果我在上面不清楚,再次抱歉。

您應該修復您的配置:

<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

引用自:https://serverfault.com/questions/495017