<virtualhost>在缺少ServerName指令时匹配

时间:2018-06-21 16:54:40

标签: apache virtualhost

我正在将某些站点从运行Apache 2.4.7的服务器迁移到运行Apache 2.4.29的新安装(Ubuntu 18),并遇到VirtualHost匹配的某些问题。

在旧服务器上,我有这样的配置:

<VirtualHost 12.34.56.78:80>
    ServerAlias *.dev.example.com
    VirtualDocumentRoot /var/www/dev/%1
</VirtualHost>

<VirtualHost 12.34.56.78:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example/
</VirtualHost>

如您所见,第一个主机使用ServerName来为基于子域的目录提供服务的第一个主机有意不使用VirtualDocumentRoot指令。在旧服务器上,这种方法一直运行良好。

在我的新环境中,起初一切都很好,但是今天(没有更新,什么都没有改变),奇怪的是一切都改变了。出于某种原因,apache开始将example.com与第一个虚拟主机进行匹配,经过大量调试后,我确定这是由于缺少ServerName指令所致。当我添加一个(实际上是任何东西)时,问题就消失了。因此,很明显,一个有效的配置现在看起来像这样:

<VirtualHost 12.34.56.78:80>
    ServerName anything.dev.example.com
    ServerAlias *.dev.example.com
    VirtualDocumentRoot /var/www/dev/%1
</VirtualHost>

<VirtualHost 12.34.56.78:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example/
</VirtualHost>

apache文档中有这样的说法,即省略了ServerName指令:

  

如果您从任何基于名称的虚拟主机中省略ServerName指令,   服务器将默认为完全限定的域名(FQDN)   从系统主机名派生。

我的系统主机名类似于servername.example.com-与example.com不匹配。

我的问题:

此较新版本的Apache行为是否发生了一些更改,这些更改会破坏我以前的配置?我正在寻找一个解释,为什么它在旧环境中可以正常工作,而现在突然不起作用。我也正在寻找所有关于ServerName缺失时apache为何匹配我的第一个虚拟主机的解释。

0 个答案:

没有答案