mod_proxy:將路徑從原始請求傳遞到代理應用程序
我正在努力反向代理在 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 應用程序可用。