代理到期望在根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试图加载图像,css,js使用诸如<img src="/images/logo.jpg">

我怎样才能解决的事情的JS / CSS等加载正确?

你有多种select,没有一个是理想的:

  • 也许你很幸运,在每个应用程序的根目录中只使用了几个不重叠的文件夹,你可以简单地添加多个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头/响应)。 mod_substitute在Apache 2.2。

我还没有testing,如果它与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>