Apache httpd-vhosts.conf 文件将所有请求发送到默认 vhost

Apache httpd-vhosts.conf 文件将所有请求发送到默认 vhost

这里有什么问题?

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName domain1.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/domain1-com
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.com
    ServerAlias www.domain2.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/domain2-com
</VirtualHost>

问题:

domain1.com正确地提供 的内容/var/www/html/domain1-com,而且domain2.com也提供 的内容/var/www/html/domain1-com

以下是输出httpd -S

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server domain1.com (/etc/httpd/conf/extra/httpd-vhosts.conf:21)
         port 80 namevhost domain1.com (/etc/httpd/conf/extra/httpd-vhosts.conf:21)
         port 80 namevhost domain2.com (/etc/httpd/conf/extra/httpd-vhosts.conf:27)
Syntax OK

这是 apache 版本 2.2.22。

提前致谢。

已更新 - 根据以下答案,我更新了我的配置文件和问题。不幸的是,问题仍然存在。(_default_在提出问题之前,我只是添加了一部分内容,以尝试自己解决问题。)

答案1

当配置基于名称的虚拟主机时,您提供给 NameVirtualHost 指令的 IP:PORT 模式必须与您提供给每个虚拟主机的 IP:PORT 模式完全相同。

因此你的配置必须是:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName domain1.com
    DocumentRoot /var/www/html/domain1-com
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.com
    ServerAlias www.domain2.com
    DocumentRoot /var/www/html/domain2-com
</VirtualHost>

您不会、也不应该使用_default_默认IP 模式用于基于 IP 的虚拟主机配置,用于指示当请求进入未配置虚拟主机的 IP 时使用的主机。这不是您在这里需要的。混合基于 IP 和基于名称的虚拟主机很复杂,并且可能导致意外结果...

对于基于名称的虚拟主机,还存在一个默认主机,所有与虚拟主机块中的服务器名称不匹配的请求都由该默认主机提供服务,但这始终是第一个。

答案2

改成NameVirtualHost *:80NameVirtualHost *

事实是,使用通配符和端口,apache 将对虚拟主机列表进行精确匹配。

相关内容