我有两个 Web 应用程序:Jira 和 Mercurial。它们以前位于同一台服务器上Dual Host
,但后来我将 Mercurial 移至Mercurial Host
。Jira 仍托管在 上Dual Host
。
Dual Host
有一个Apache 2.2.22
服务器曾经托管 Mercurial,但现在将作为反向代理。
在我的域名服务器上,我已经设置jira
为指向 的Dual Host
IP 和mercurial
指向Mercurial Host
的 IP。
人们过去通过 来访问 Jira http://dualhost:4040/
,通过 来访问 Mercurial http://dualhost/
。
我设置了一个反向代理来代理对http://dualhost/
to 的请求http://mercurial/
(这样就可以在各个地方找到提交的现有链接)。下面的配置可以正常工作:
<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文档,看起来应该可以工作。我做错了什么?
答案1
<VirtualHost *:80>
尝试在您的虚拟主机配置中使用jira
。
虚拟主机匹配是顺序敏感的,因此如果 a<VirtualHost *:80>
在 a 之前<VirtualHost jira:80>
,则第二个将永远不会匹配。如果您使用多个不同的文件,情况也是如此,conf.d/*.conf
因为 apache 会按字母顺序加载这些文件。
从您的示例中,可以假设您将使用名为conf.d/dualhost.conf
和的文件conf.d/jira.conf
。由于dualhost
按字母顺序排列在 之前jira
,因此第二个永远不会匹配。