具有多个域的 VirtualHost 未提供正确的 DocumentRoot

具有多个域的 VirtualHost 未提供正确的 DocumentRoot

运行 CentOS 6、Apache。

我的 httpd.conf 中有以下内容:

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName domain1.example
    ServerAlias www.domain1.example
</VirtualHost>

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

每当我访问domain2.example(或www.domain2.example)时,都会看到domain1.example

编辑:更多信息来自httpd.conf

Listen 80
#NameVirtualHost *:80

我已经检查过的内容:

  • Apache 已重新启动
  • DNSdomain1.exampledomain2.example指向同一 IP

我错过了什么?

解决方案:

正如 Patrick 指出的那样,在 Apache 2.2 中,NameVirtualHost使用多个VirtualHosts 时是必需的。这里的解决方案是取消注释以下行httpd.conf

#NameVirtualHost *:80

到:

NameVirtualHost *:80

答案1

由于您只使用 Apache 2.2,因此您绝对需要使用该NameVirtualHost指令以便让 Apache 知道您有多个使用不同名称但具有相同 IP 的网站。

该指令在 Apache 2.3 中已弃用,如以下文档所述:httpd.apache.org/docs/2.4/mod/core.html#namevirtualhost

在 2.3.11 之前,NameVirtualHost 需要指示服务器,特定 IP 地址和端口组合可用作基于名称的虚拟主机。在 2.3.11 及更高版本中,只要在多个虚拟主机中使用 IP 地址和端口组合,就会自动为该地址启用基于名称的虚拟托管。

对于您的版本,基于配置名称的虚拟主机的指南在这里: http://httpd.apache.org/docs/2.2/vhosts/name-based.html#using

答案2

看起来它与第一个虚拟主机匹配。

尝试这样的操作:

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

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

相关内容