2008-10-09 94 views
11

我的團隊正在嘗試將客戶站點的Apache反向代理設置爲我們的一個Web應用程序。Apache - 反向代理和HTTP 302狀態消息

http://www.example.com/app1/some-path映射到http://internal1.example.com/some-path

裏面我們的應用中使用Struts和具有重定向=某些行動真正集,以提供特定的功能。來自這些重定向的302狀態消息導致用戶跳出代理,導致最終用戶出現錯誤頁面。

HTTP/1.1 302找到 地點:http://internal.example.com/some-path/redirect

有沒有辦法設置在apache的反向代理,以便正常進行重定向?

http://www.example.com/app1/some-path/redirect

回答

1

嘗試使用AJP連接代替反向代理的。當然不是一個小小的改變,但我發現,當使用AJP而不是反向代理時,很多URL惡夢消失了。

+0

我花了3個小時試圖找到一種可靠的方法來阻止http重定向通過沒有AJP的https代理。我最終通過在ProxyPass和ProxyPassReverse指令中使用ajp而不是http來解決此問題。 – Gnafu 2017-04-06 10:30:50

2

AskApache article是相當有用的,但實際上我發現重寫規則和ProxyPassReverse的組合更加靈活。所以你的情況我會做這樣的事情:

<VirtualHost example> 
     ServerName www.example.com 

     ProxyPassReverse /app1/some-path/ http://internal1.example.com/some-path/ 
     RewriteEngine On 
     RewriteRule /app1/(.*) http://internal1.example.com/some-path$1 [P] 

     ... 
    </VirtualHost> 

我喜歡這個更好,因爲它讓你在你進行代理的內部服務器的路徑更細粒度的控制。在我們的案例中,我們只想公開部分第三方應用程序。請注意,這並不涉及HTML中的硬編碼鏈接,AskApache文章涵蓋了這些鏈接。

另外請注意,你可以有多個ProxyPassReverse行:

ProxyPassReverse/http://internal1.example.com/some-path 
    ProxyPassReverse/http://internal2.example.com/some-path 

我提到這一點,只是因爲其他第三方應用程序我們進行代理被髮出重定向,不包括其內部的主機名,只是一個不同的港口。

作爲最後一點,請記住Firebug在調試重定向時非常有用。