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版本。

提前致谢。

更新 – 基于下面的答案,我更新了我的conf文件和问题。 不幸的是问题依然存在。 (我只是添加了_default_作为我试图在提出问题之前自己解决这个问题的一部分。)

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

所以你的configuration必须是:

 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的虚拟主机configuration中使用默认的 IP模式,以指示当请求进入没有configuration虚拟主机的IP时使用的主机。 这不是你在这里所需要的。 混合基于IP和基于名称的虚拟主机是复杂的,并可能导致意想不到的结果…

使用基于名称的虚拟主机,还有一个默认的主机,所有请求的服务都与虚拟主机块中的一个服务器名称不匹配,但这总是第一个。

NameVirtualHost *:80更改为NameVirtualHost *

事情是通配符和端口,Apache将在虚拟主机列表上完成匹配。