代理到期望位于根 URL 的站点?

代理到期望位于根 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 等以便正确加载?

答案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>

相关内容