Apache 虚拟主机默认为 FQDN
Apache virtualhost defaults to FQDN
我在我的 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 手册页,但找不到解释。仅说明如果名称 not 匹配任何虚拟主机,则使用默认值。但如果 FQDM 等于请求的名称,则不会使用默认值。
这是设计使然的行为吗?
是的,当您从系统本地主机名初始化的 VirtualHost 中省略 ServerName 时,这是设计使然,或者禁止从任何本地 IP 地址的反向 DNS 查找。
不幸的是,此配置是由 debian/ubuntu 软件包创建的默认虚拟主机完成的。
事后看来——在 catch-all(第一个列出的)虚拟主机中设置一个完全虚拟的 ServerName 被认为是更可取的。
我在我的 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 手册页,但找不到解释。仅说明如果名称 not 匹配任何虚拟主机,则使用默认值。但如果 FQDM 等于请求的名称,则不会使用默认值。
这是设计使然的行为吗?
是的,当您从系统本地主机名初始化的 VirtualHost 中省略 ServerName 时,这是设计使然,或者禁止从任何本地 IP 地址的反向 DNS 查找。
不幸的是,此配置是由 debian/ubuntu 软件包创建的默认虚拟主机完成的。
事后看来——在 catch-all(第一个列出的)虚拟主机中设置一个完全虚拟的 ServerName 被认为是更可取的。