Httpd
代理到期望位於根 URL 的站點?
我正在執行 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>