Apache 的 VirtualHosts 不遵守 ServerName

Apache 的 VirtualHosts 不遵守 ServerName

这个问题一直困扰着我,我一直没能弄清楚为什么 Apache 会这样做,我总是求助于 mod_vhost 插件来解决这个问题。

基本上,我在启用站点的(Ubuntu服务器)中有2个虚拟主机,它们的内容:

<VirtualHost *>
DocumentRoot "/var/www/vhosta.domain.com/"
ServerName vhosta.domain.com
<Directory "/var/www/vhosta.domain.com/">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

<VirtualHost *>
DocumentRoot "/var/www/vhostb.domain.com/"
ServerName vhostb.domain.com
<Directory "/var/www/vhostb.domain.com/">
allow from all
Options +Indexes
</Directory>
</VirtualHost>

现在从逻辑上讲,这两者可以单独访问,但是似乎对我的服务器的所有请求(无论我在此定义什么虚拟主机)都将转到 vhosta.domain.com。

我是否忽略了一些非常明显的事情?我真的不明白为什么会这样。

谢谢

答案1

您缺少 NameVirtualhost;但是:

  • 请勿使用 VirtualHost *;VirtualHost *:80而是使用。

正确的做法如下:

NameVirtualHost *:80

<VirtualHost *:80>
  Servername vhosta
</VirtualHost>

<VirtualHost *:80>
  Servername vhostb
</VirtualHost>

答案2

在定义虚拟主机之前,您需要类似以下内容:

NameVirtualHost *:80

您正在执行基于名称的虚拟主机。请参阅此处的文档:

http://httpd.apache.org/docs/2.2/mod/core.html#namevirtualhost

相关内容