Httpd

代理到期望位於根 URL 的站點?

  • August 7, 2014

我正在執行 ActiveMQ 和 Accumulo,它們都有自己的 Web 控制台。我想把 apache httpd 放在他們面前。我設置了 mod_proxy 並將以下內容添加到 /etc/httpd/conf.d/proxy.conf

ProxyPass /activemq http://1.2.3.4:8161
ProxyPassReverse /activemq http://1.2.3.4:8161

ProxyPass /accumulo http://5.6.7.8:50095
ProxyPassReverse /accumulo http://5.6.7.8:50095

問題是 AMQ 和 Accumulo 站點無法正常工作/看起來像它們應該的那樣,因為它們的 HTML 嘗試使用諸如 url 載入圖像、css、js<img src="/images/logo.jpg">

如何正確修復 js/css 等載入?

您有多種選擇,但都不是理想的:

  • 也許你很幸運,每個應用程序的根目錄中只使用了幾個不重疊的文件夾,你可以簡單地添加多個 ProxyPass 指令。
  • 重新部署 ActiveMQ 和 Accumulo,使它們不再安裝在根目錄中,而是安裝在子文件夾中。
  • 為每個應用程序使用子域,例如 activemq.example.com 和 accumulo.example.com 並將您的站點使用者引導到那裡。

即類似的東西:

<VirtualHost *:80>
   ServerName activemq.example.com
   ProxyPass / http://1.2.3.4:8161
   ProxyPassReverse / http://1.2.3.4:8161
</VirtualHost>
  • 實際上,您不僅可以讓 apache 代理對您的內部應用程序的請求,還可以在將響應正文傳輸給您的站點訪問者之前重寫響應正文。(通常代理只重寫 HTTP 標頭/響應)。apache 2.2 中的 mod_substitute。

我還沒有測試過它是否與 mod_proxy 很好地堆疊並且可能會導致大量成本,但也許以下工作:

<Location /activemq/>
 ProxyPass http://1.2.3.4:8161
 ProxyPassReverse http://1.2.3.4:8161
 AddOutputFilterByType SUBSTITUTE text/html
 Substitute "s|/images/|/activemq/images/|i" 
</Location>

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