在VirtualHost上下文中的_default _:*和*:*之间的区别

我想知道VirtualHost上下文中的default :*”“*:*”之间的区别。

<VirtualHost _default_:*> #... ServerName host.example.com #... </VirtualHost> <VirtualHost *:*> #... ServerName host.example.com #... </VirtualHost> 

我不知道使用的差异和porpouse。

THK

解决scheme是关于Virtualhost指令的 Apache 2.2文档:

语法:…(…)Addr可以是:

  • 虚拟主机的IP地址;
  • 虚拟主机IP地址的完全限定域名(不推荐);
  • 字符* ,仅与NameVirtualHost *结合使用以匹配所有IP地址; 要么
  • string_default_ ,仅用于IP虚拟主机以捕获不匹配的IP地址。

存在两种处理虚拟主机的方式:基于名称的虚拟主机和基于IP的虚拟主机。

通过基于命名的虚拟主机,您可以获得一个虚拟主机列表,每个虚拟主机pipe理一个或多个域名,每个虚拟主机关联一对listening IP:port*是一个特殊的值,表示这个主机上的所有IP地址 。 对于每个给定的监听地址,默认的virtualHost是这个列表中第一个声明的虚拟主机。

对于基于IP的VirtualHosts,不使用VirtualHost的ServerName指令,重要的信息是侦听的IP(和端口),默认的VirtualHost是匹配处理传入请求的IP的第一个。

所以使用基于命名的虚拟主机configuration:

  • <Virtualhost *:80> with ServerName foo.com表示“在该主机上pipe理的所有IP”,“在端口80上”,“如果请求主机头是foo.com”,我将使用这个虚拟主机
  • <Virtualhost *:*> with Servername foo.com表示“在该主机上pipe理的所有IP”,“在所有端口上”,“如果请求主机头是foo.com”,我将使用这个虚拟主机
  • <Virtualhost 10.0.0.2:*> with Servername foo.com意思是“对于从我的networking接口10.0.0.2传入的请求”,“在所有端口上”,“如果请求主机头是foo.com”,我将使用这个虚拟主机
  • <Virtualhost _default_:*> with Servername foo.com :不能与基于名称的虚拟主机一起使用

而在基于IP的虚拟主机上:

  • <Virtualhost 10.0.0.2:*>意思是“我将使用这个虚拟主机来请求我的10.0.0.2接口”
  • <Virtualhost _default_:443>意思是“我将使用这个虚拟主机在我的主机上的所有其他networking接口来请求端口443”
  • <Virtualhost _default_:*>意思是“如果我的主机上的所有其他networking接口都使用此虚拟主机,如果它与先前的规则不匹配,并且请求主机头没有与基于命名的虚拟主机相匹配”

所以这就是定义一个全能的虚拟主机。 文件增加:

当使用基于IP的虚拟主机时,可以指定特殊名称_default_在这种情况下,该虚拟主机将匹配未在另一个虚拟主机中明确列出的任何IP地址。 在没有任何_default_虚拟主机的情况下,当没有发生IP匹配时,将使用“主”服务器configuration(由任何VirtualHost部分之外的所有这些定义组成)。 (但是请注意,任何与NameVirtualHost指令相匹配的IP地址都不会使用“主”服务器configuration或_default_虚拟主机。请参阅基于名称的虚拟主机文档以获取更多详细信息。

因此,在所有这些事情之后,将基于IP和基于名称的虚拟主机混合可能变得混乱,这变得相当“清楚”。 使用Apache 2.2仅当使用NameVirtualhost <something>时才使用基于名称的虚拟主机。

但是,新的Apache 2.4版本的东西真的很容易理解,没有NameVirtualhost声明。 NameVirtualHost指令不再有任何作用,除了发出警告。 出现在多个虚拟主机中的任何地址/端口组合被隐式地视为基于名称的虚拟主机 。 没有更复杂的,虽然文件现在更简单:

  • 字符*,充当通配符并匹配任何IP地址。
  • string_default_ ,它是*的别名

所以用apache 2.4的答案是, 这是一回事

_default_虚拟主机的所有端口

将每个请求捕获到任何未指定的IP地址和端口,即不用于任何其他虚拟主机的地址/端口组合。

http://httpd.apache.org/docs/2.2/vhosts/examples.html#default