【问题标题】:Apache virtualhost defaults to FQDNApache 虚拟主机默认为 FQDN
【发布时间】:2016-04-29 11:09:41
【问题描述】:

我在我的 Apache 系统上设置了一个虚拟主机,它恰好与服务器的 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 手册页,但找不到解释。仅说明如果名称​​不与任何虚拟主机匹配,则使用默认值。但如果 FQDM 等于请求的名称,则不使用默认值。

这是设计使然吗?

【问题讨论】:

    标签: apache virtualhost


    【解决方案1】:

    是的,当您省略从系统本地主机名初始化的 VirtualHost 中的 ServerName 时,这是设计使然,或者禁止从任何本地 IP 地址的反向 DNS 查找中。

    不幸的是,这个配置是由 debian/ubuntu 包创建的默认虚拟主机完成的。

    事后看来——在一个包罗万象(第一个列出的)虚拟主机中设置一个完全虚拟的 ServerName 被认为是可取的。

    【讨论】:

    • 啊!我明白您所说的“从虚拟主机中省略 ServerName”的意思。 000-default.conf 文件有一个没有名称的 VirtualHost。这使得它使用主机名进行初始化。是的,输入一个虚拟服务器名可以解决这个问题。奇怪的是,当最终在下一个 VirtualHost 中指定时,没有更正 ServerName 的缺失。
    • 下一个vhost中的那个只是给下一个vhost
    • 不,不是。这就是令人困惑的原因。下一个虚拟主机将被忽略,因为默认优先于指定的虚拟主机。您的回答中的解释是正确且非常清楚的。
    • 这简直把我逼疯了,就像在编辑 Apache 配置文件时一样。非常感谢您的澄清。
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2018-03-23
    • 2017-01-26
    • 2016-10-12
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多