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