我想知道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