Apache-2.2

mod_proxy:將路徑從原始請求傳遞到代理應用程序

  • April 18, 2012

我正在努力反向代理在 Apache 後面的封閉埠上的 Tomcat 伺服器中執行的應用程序。為方便起見,假設我想將“ http://mydomain/apps/my_app/ ”的代理請求反向到遠端伺服器上“ http://localhost:8082/my_app/ ”的 Tomcat 應用程序。Apache vhost.conf 文件中的以下代理設置一切正常:

ProxyRequests       off
ProxyPass /apps/    http://localhost:8082/
ProxyPassReverse /apps/  http://localhost:8082/

除了應用程序的一部分,它會生成一個 Java webstart 文件,該文件將在客戶端執行,並且需要在“ http://localhost:8082/my_app/webstart ”(在遠端伺服器)。

問題的關鍵是這個連接顯然不起作用,因為 a) 對 localhost 的請求將相對於客戶端電腦進行解釋,並且 b) 即使它指向遠端伺服器,埠 8082 也在那里關閉。

因此,我想出了 ProxyPreserveHost 可以如何提供幫助,以便將原始請求的主機名傳播到 Java webstart 請求:

ProxyRequests       off
ProxyPreserveHost   on
ProxyPass /apps/    http://localhost:8082/
ProxyPassReverse /apps/  http://mydomain/

這有效(即使代理 Tomcat 應用程序中的內部重定向也可以通過 ProxyPassReverse 設置工作)……幾乎。一個問題仍然存在:Java webstart 文件使用的 URL 缺少“/apps/”部分,並將嘗試連接到“ http://mydomain/my_app/webstart ”,而不是“ http://mydomain ” /apps/my_app/webstart ‘,這顯然會失敗,因為只有以 /apps/ 開頭的請求才會被反向代理。顯然,代理應用程序沒有“看到”完整的原始 URL(’ http://mydomain/apps/my_app/ ‘),而只是被代理處理過濾掉的部分(’ http://mydomain/my_app/ ‘)。

是否有任何我忘記的代理設置可以使 Apache 將路徑從原始 URL 傳遞到代理應用程序?

親切的問候,

羅恩

代理後端根本看不到原始請求;這就是代理的全部意義。

您可能需要以下內容:

ProxyPass /apps/ http://localhost:8082/apps/
ProxyPassReverse /apps/ http://localhost:8082/apps/

並在這種情況下使 tomcat 應用程序可用。

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