如果域与服务器 FQDN 相同,Apache 无法找到虚拟主机

如果域与服务器 FQDN 相同,Apache 无法找到虚拟主机

在 Apache 中,我设置了一个虚拟主机,服务器名称为 host1.example.com

在 /etc/hosts 中,有一个 host1 的条目

127.0.1.1 host1.example.com host1

在 /etc/hostname 中

主机1

这是 Debian/Ubuntu 创建 FQDN 的方式。

Apache 在为具有与服务器本身相同的 FQDN 的虚拟主机提供内容时似乎遇到了问题。

当使用 host1.example.com 的 vhost 运行 nginx 时,它可以毫无问题地获取 Host 头并使用正确的 vhost。

但是使用 Apache 时会出现问题,它总是使用 000-default。删除 000-default 会使其切换到下一个 vhost,删除我想要工作的域的 vhost 文件以外的所有文件,最终使其工作。

NameVirtualHost 设置为 *

日志中没有错误消息,没有重叠的虚拟主机,并且 vhost 配置非常好。

<VirtualHost *>
        ServerAdmin webmaster@localhost
        ServerName host1.example.com

        DirectoryIndex index.php index.htm index.html
        DocumentRoot /var/www/host1.example.com

        <Directory />
            Options FollowSymLinks Includes -Indexes
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
</VirtualHost>

有人有主意吗?

编辑:

apache -t -D DUMP_VHOSTS 输出:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:*                    is a NameVirtualHost
         default server the.server.fqdn (/etc/apache2/sites-enabled/000-default:1)
         port * namevhost the.server.fqdn (/etc/apache2/sites-enabled/000-default:1)
         port * namevhost host1.example.com (/etc/apache2/sites-enabled/host1.example.com:1)
Syntax OK

答案1

嗯,似乎对此没有真正的答案,这可能只是一个 Debian/Ubuntu 的问题,基于他们如何解析自己的 FQDN。

我发现只需注释掉 /etc/hosts 中的主机和 FQDN 解析即可解决问题。

#127.0.1.1 host1.example.com host1

然而,这不是真正的解决方案,但这是必需的,否则您在尝试运行 sudo 和其他程序时会遇到错误,因为它无法解析主机名。

对我来说最简单的解决方案是在 000-default 中添加一行:

ServerName localhost

这本身也不是一个真正的解决方案,但它确实意味着它不会与其他主机匹配,并且因为它是 Apache 找到的第一个主机,所以如果找不到匹配项,它将解析到该主机。

答案2

每当 Apache 启动错误的虚拟主机时,httpd -t -D DUMP_VHOSTS通常都能很好地指出问题所在。

相关内容