我正在运行 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 等以便正确加载?
答案1
您有多种选择,但没有一种是理想的:
也许您很幸运,每个应用程序的根目录中只使用了几个不重叠的文件夹,您可以简单地添加多个 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>