Apache 代理程式設定(Web 應用程式資源 URL 被截斷)

Apache 代理程式設定(Web 應用程式資源 URL 被截斷)

我正在嘗試在 Apache Web 伺服器中設定代理,但我遇到了有關 URL 建置的問題,因為路徑的結果 URL 部分遺失了。一個例子:

http://server/webapp/style.css(預期的)

http://server/style.css(真實結果)

我有一個暴露在網路上的伺服器(我稱之為前端伺服器)和內部網路中的另一台伺服器(後端伺服器)(無法從網路存取),其中有我想要在外部代理程式的網路應用程式.我嘗試了一些方法,主要問題是代理中的 URL 沒有以正確的方式(重新)編寫,伺服器或瀏覽器遺漏了一部分。

我嘗試過的:

ProxyPass /webapp http://backendserver
ProxyPassReverse /webapp http://backendserver

瀏覽器中應用程式的 URL 正確http://frontendserver/webapp;這索引.html可見,但所有附加資源(js、套接字、css 等)均遺失,因為它們的 URLhttp://frontendserver/style.css不是http://frontendserver/webapp/style.css.


這是正確設定此類代理的正確方法嗎?

我也使用 Apache 重寫模組嘗試了其他一些解決方案,但沒有達到好的結果,也許有人有一個很好的建議來解決這個問題。

謝謝

答案1

ProxyPass更改 URL 的應答方式,但不會重寫 index.html 中的 URL。要解決該問題,您的選擇是:

  1. 重寫 index.html 以使用相對連結 ( css/style.css) 而不是絕對連結 ( /css/style.css),因此它們仍然可以在不同的 URL 基礎上工作。

  2. 使用mod_proxy_html重寫傳出 HTML、Javascript 和 CSS 內容中的連結。就像是:

    <Files *.html>
      ProxyHTMLEnable On
      ProxyHTMLLinks  a  href
      ...
      ProxyHTMLURLMap http://frontendserver/ http://frontendserver/webapp/
    </Files>
    

如果您可以輕鬆做到,第一個解決方案是最好的,因為它使您的內容可移植且更可靠。

如果您內容中的所有 URL 都是靜態的,則第二個解決方案可能適合您。但是 mod_proxy_html 對動態計算的 URL 一無所知 - 例如,如果您在 Javascript 中計算 URL。因此,在這種情況下,除非您也修改程式碼以使用動態 URL 庫,否則它將失敗。

相關內容