如何使用不同的域和不同的端口配置 apache namevirtualhost

如何使用不同的域和不同的端口配置 apache namevirtualhost

我配置了 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>

相关内容