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


16

在我们的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.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

Answers:


40

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

ServerName somename.dev

ServerAlias *.dev


2
最新的apache版本甚至将不再允许在ServerName中使用通配符,并且该错误告诉您改为使用ServerAlias。
2015年

太棒了 这很迅速而且很关键。Def为我节省了时间。谢谢。
Art Geigel

4

如果这可以帮助,请完成一点莫的答案:

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

ServerName somename.dev

ServerAlias *-mysite.dev

它救了我的命最近^^(一个主网站与子域,每个子应用程序,例如admin-somename.devbo-somename.devapi-somename.dev...)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.