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

Mar*_*els 17 ubuntu lamp virtualhost apache-2.2

在我们的 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>
Run Code Online (Sandbox Code Playgroud)

主机名(例如www.domain.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
Run Code Online (Sandbox Code Playgroud)

Mo.*_*Mo. 44

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

ServerName somename.dev

ServerAlias *.dev

  • 最近的 apache 版本甚至不再允许在 ServerName 中使用通配符,并且错误告诉您改用 ServerAlias。 (4认同)