针对两个Web应用程序的Apache反向代理:一个在远程机器上的另一个本地主机上

我有两个Web应用程序:Jira和Mercurial。 他们曾经是在同一台服务器Dual Host但我已经把Mercurial移动到Mercurial Host 。 Jira仍然在Dual Host上Dual Host 。

Dual Host有一个Apache 2.2.22服务器,用于托pipeMercurial,但现在将作为反向代理。

在我的域名服务器上,我设置了jira来指向Dual Host的IP, mercurial指向Mercurial Host的IP。

用户通过访问http://dualhost:4040/和Mercurial访问Jira,访问http://dualhost/ 。

我已经设置了一个反向代理来代理请求http://dualhost/ to http://mercurial/ (以便现有链接在各个地方提交)。 这与以下configuration工作正常:

 <VirtualHost *:80> ServerName dualhost ProxyPreserveHost On ProxyPass / http://mercurial:80/ ProxyPassReverse / http://mercurial:80/ </VirtualHost> 

现在我想代理http://jira请求到http://dualhost:4040但是我一直在代理Mercurial。

原因是我想在日后将Jira移动到新的服务器上,URL越“正确”越好。

我已经设置了这个规则:

 <VirtualHost jira:80> ServerName jira ProxyPreserveHost On ProxyPass / http://localhost:4040/ ProxyPassReverse / http://localhost:4040/ </VirtualHost> 

我在看Apache 2.2的文档,这看起来应该工作。 我究竟做错了什么?

尝试在您的jira虚拟主机configuration中使用<VirtualHost *:80> 。

<VirtualHost *:80>匹配是顺序敏感的,所以如果<VirtualHost *:80>出现在<VirtualHost jira:80> ,第二个将永远不匹配。 如果你使用多个不同的conf.d/*.conf文件,也是如此,因为apache按字母顺序加载这些文件。

从你的例子中,可以假设你会使用名为conf.d/dualhost.conf和conf.d/jira.conf 。 由于dualhost在jira之前按字母顺序排列,所以第二个永远不会匹配。