我在我的Apache系统上设置了一个VirtualHost,它恰好与服务器的FQDN同名。这是FQDN:
root@mail:/etc/apache2/sites-available# hostname -f
mail.example.com
这是.conf文件的内容:
000-default.conf:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
example.com.conf:
<VirtualHost *:80>
ServerName mail.example.com
DocumentRoot /home/example/public_html
</VirtualHost>
现在我希望mail.example.com与VirtualHost匹配,因此使用DocumentRoot / home / example / public_html。 它没有。
运行apache2ctl -S会产生:
*:80 is a NameVirtualHost
default server mail.example.com (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost mail.example.com (/etc/apache2/sites-enabled/000-default.conf:1)
port 80 namevhost mail.example.com (/etc/apache2/sites-enabled/abcarrental.nl.conf:1)
因此默认服务器是mail.example.com,因此DocumentRoot是/ var / www / html。
选择不同的VirtualHost名称(例如webmail.example.com)并将VirtualHostName更改为webmail.example.com可以解决问题。
我已经浏览了Apache NamedVirtualHost手册页,但我找不到解释。仅解释如果名称不与任何vhost匹配,则使用默认值。但是,如果FQDM等于请求的名称,则不使用默认值。
这是设计的行为吗?
答案 0 :(得分:2)
是的,当您从VirtualHost中省略ServerName时,它是从系统本地主机名初始化的,或者禁止从任何本地IP地址的反向DNS查找。
遗憾的是,这个配置是由debian / ubuntu软件包创建的默认虚拟主机完成的。
事后看来 - 在全能(首次列出的)虚拟主机中设置一个完全虚拟的ServerName是可取的。