我正在将某些站点从运行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为何匹配我的第一个虚拟主机的解释。