Apache-2.2
通過 Apache(代理通行證 - 埠 80)和 tomcat(埠 8080)訪問 Web 應用程序時,如何確保上下文路徑相同?
我已經用 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 都不起作用。此外,我可能正在完全錯誤地設置我的網路應用程序,因此任何更好地設置它的建議將不勝感激。
在堆棧溢出時問這個問題,但在這裡被指出……
編輯
正如下面評論中提到的,我正在設置一個域名,並希望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