为什么要在Apacheconfiguration中监听特定的IP地址?

我发现Apacheconfiguration可以指定一个特定的IP地址来侦听(至less在定义VirtualHost时):

NameVirtualHost *:80 <VirtualHost *:80> 

在什么情况下指定一个地址而不是使用通配符?

(我最近在一台IP地址改变了的机器上工作,那个configuration了Apache的人没有使用通配符,所以除了404以外,没有任何服务器,我没有想到这个configuration,所以问题直到我请求他排除故障,我能从服务或日志中获得更多的debugging信息,从而帮助我发现这个问题吗?)

将特定虚拟主机绑定到特定IP地址的最常见的实际原因通常是为默认HTTPS端口上的不同HTTPS站点支持不同的SSL证书。
随着SNI支持在现代浏览器中的广泛适应,已不再是一个问题。

第二个实际的原因是在多宿主Web服务器上。 内部networking上的Intranet网站仅限于该networking接口,强制只能从内部LAN访问,而不能从WAN接口访问(例如,伪造的Host:头部)。

如果您在同一台服务器上托pipe多个站点,则可以使用不同的主机名或不同的IP来分隔它们。

例如:

基于主机的虚拟主机configuration:

  NameVirtualHost *:80 <VirtualHost employees.nationalpurchasingpartners.com:80> ServerAdmin [email protected] DocumentRoot /var/www/intranet/public_html ServerName employees.nationalpurchasingpartners.com </VirtualHost> <VirtualHost procurementnews.com:80> ServerAdmin [email protected] DocumentRoot /var/www/procurement/public_html ServerName www.procurementnews.com ServerAlias procurementnews.com *.procurementnews.com </VirtualHost> 

基于IP的虚拟主机configuration:

 <VirtualHost 192.168.0.1:80> ServerAdmin [email protected] DocumentRoot /groups/smallco/www ServerName smallco.example.com ErrorLog /groups/smallco/logs/error_log TransferLog /groups/smallco/logs/access_log </VirtualHost> <VirtualHost 192.168.0.2:80> ServerAdmin [email protected] DocumentRoot /groups/baygroup/www ServerName baygroup.example.com ErrorLog /groups/baygroup/logs/error_log TransferLog /groups/baygroup/logs/access_log </VirtualHost> 

您可以在Apache 官方文档站点上find更多信息。