![如果域与服务器 FQDN 相同,Apache 无法找到虚拟主机](https://linux22.com/image/531095/%E5%A6%82%E6%9E%9C%E5%9F%9F%E4%B8%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%20FQDN%20%E7%9B%B8%E5%90%8C%EF%BC%8CApache%20%E6%97%A0%E6%B3%95%E6%89%BE%E5%88%B0%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA.png)
在 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
通常都能很好地指出问题所在。