apache2:www去默认服务器,我不知道为什么

我正在build立一个具有多个虚拟主机的apache2服务器。

他们都在工作,除了www.mydomain.com,它转到默认的虚拟主机,而不是我为它创build的虚拟主机。

虚拟主机文件(www.mydomain.com.conf)如下所示:

<VirtualHost *:80> ServerName www.mydomain.com ServerAdmin [email protected] DocumentRoot /var/www/mydomain.com/www ErrorDocument 404 "/error.php" </VirtualHost> 

如果我将ServerName更改为www2.mydomain.com它的作品。 如果我将其更改回www.mydomain.com则会转到默认的虚拟主机。

默认的虚拟主机文件(000-default.conf)如下所示:

 <Virtualhost *:80> ServerAdmin [email protected] DocumentRoot /var/www/mydomain.com/html <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/mydomain.com/html> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/error.log LogLevel warn CustomLog /var/log/apache2/access.log combined </VirtualHost> 

还有一点需要注意的是,可能会影响到这一点,就是服务器的主机名(/ etc / hostname)是www.mydomain.com

www. 一个特例? 为什么会发生这种情况,我如何使它像我想要的那样工作?

我使用Ubuntu 16.04,Apache2服务器版本:Apache / 2.4.18(Ubuntu)

编辑:我已经证实,问题是/ etc /主机名有www.mydomain.com – 我把它改为www-server.mydomain.com现在www虚拟主机去正确的地方。 我仍然不知道为什么会发生这种情况。

正如我记得,如果没有设置ServerName,Apache使用服务器主机名作为默认的虚拟主机的ServerName,你也应该看到一个关于Apache日志的警告或当你重新启动Apache输出。

你也可以在ServerConfig中添加ServerName指令到默认的虚拟主机或全局的Apache conf,但是我认为这是一个使用专用主机名如srv-something.example.com命名服务器的最佳实践。

至于隐含的ServerName来自哪里的问题,

如果未指定ServerName,则服务器会首先向操作系统请求系统主机名,然后尝试推导客户端可见主机名,如果失败,则对系统上存在的IP地址执行反向查找。

但是,在其他问题上,您需要查看您的授权scheme。 看起来您没有授权访问新的虚拟主机,而使用默认的过期指令。

您应该确保已启用mod_authz_core并将其添加到新的虚拟主机configuration中:

  <Directory /var/www/mydomain.com/www> Require all granted </Directory> 

此外,所有的Order allow,denyallow from all默认configuration中的allow from all爵士是弃用的Apache 2.2的东西,应改为使用Apache 2.4 Require指令 。

为了安全起见,你的主要apache2.conf (或者security.conf ,或者你想要处理这些事情的地方)应该包括:

  <Directory /> Require all denied </Directory>