Apache 基于名称的虚拟主机中的 ServerName 通配符?

Apache 基于名称的虚拟主机中的 ServerName 通配符?

在我们的 LAN 上,我在 DNS 服务器中设置了几个“假”TLD,目的是将它们用于基于 Apache 名称的虚拟托管。我想将其与 Ubuntu 10.04 LAMP 服务器上的大规模虚拟托管(即 VirtualDocumentRoot)结合起来。

但是,我无法让它选择正确的虚拟主机!

以下是 Apache 配置的摘要:

NameVirtualHost 10.10.0.205

<VirtualHost 10.10.0.205>
   ServerName *.test
   VirtualDocumentRoot /var/www/%-3.0.%-2/test/%1/
   CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>

<VirtualHost 10.10.0.205>
   ServerName *.dev
   VirtualDocumentRoot /var/www/%-3.0.%-2/dev/%1/
   CustomLog /var/log/apache2/access.log vhost_combined
</VirtualHost>

主机名如www.域名.com.dev,正确解析为 10.10.0.205,但始终选择顶部虚拟主机,而不是底部更接近的虚拟主机。

我以为 Apache 会先尝试匹配 ServerName,然后默认为给定 IP 的顶级虚拟主机。我做错了什么?或者这是不可能的,我必须为每个 TLD 使用另一个 IP?

apachectl -S 输出(修剪后):

10.10.0.205:*          is a NameVirtualHost
    default server *.test
    port * namevhost *.test
    port * namevhost *.dev

答案1

使用ServerAlias,而不是ServerName单独使用:

ServerName somename.dev

ServerAlias *.dev

答案2

如果这能有所帮助,就补充一下莫的回答:

ServerAlias 中的通配符也适用于部分域名,例如

ServerName somename.dev

ServerAlias *-mysite.dev

它最近救了我的命^^(主站点,每个子应用程序都有子域名,例如admin-somename.dev,,...)bo-somename.devapi-somename.dev

相关内容