我配置了 httpd.conf
NameVirtualHost *:8801
<VirtualHost *:8801>
ServerName sub1.domain.com
ServerAlias sub1.domain.com
DocumentRoot /www/site1
</VirtualHost>
NameVirtualHost *:8802
<VirtualHost *:8802>
ServerName sub2.domain.com
ServerAlias sub2.domain.com
DocumentRoot /www/site2
</VirtualHost>
服务运行良好,但域名 sub2.domain.com:8801 也可以访问第一个网站,我不想这样。我该如何解决?谢谢。
答案1
将它们放在同一个端口上(例如 8801)。
Apache 将尽力根据 IP 地址(本例中为 *)、端口以及最后(如果需要)根据名称匹配虚拟主机。如果找不到匹配项,它还会默认使用最近的配置。因此,当您查找 sub2.domain.com:8801 时,它无法根据三个条件找到完全匹配项,因此会选择第一个,因为该条件至少在 IP 和端口上匹配。如果您对两个子域使用相同的端口号,则不会发生这种情况。
另一种方法是,如果您确实希望将其保留为两个端口,则在每个子域的另一个端口上放置一个虚拟服务,然后重定向回主端口:
NameVirtualHost *:8801
<VirtualHost *:8801>
ServerName sub1.domain.com
ServerAlias sub1.domain.com
DocumentRoot /www/site1
</VirtualHost>
<VirtualHost *:8801>
ServerName sub2.domain.com
ServerAlias sub2.domain.com
Redirect : http://sub2.domain.com:8802/
</VirtualHost>
NameVirtualHost *:8802
<VirtualHost *:8802>
ServerName sub2.domain.com
ServerAlias sub2.domain.com
DocumentRoot /www/site2
</VirtualHost>
<VirtualHost *:8802>
ServerName sub1.domain.com
ServerAlias sub1.domain.com
Redirect / http://sub1.domain.com:8801:
</VirtualHost>