我想知道VirtualHost上下文中"default:*“和"*:*”之间的区别。
<VirtualHost _default_:*>
#...
ServerName host.example.com
#...
</VirtualHost>
<VirtualHost *:*>
#...
ServerName host.example.com
#...
</VirtualHost>我不知道它有什么区别,也不知道它的用途。
特克
发布于 2014-01-15 11:02:37
解决方案位于Apache2.2文档关于Virtualhost指令上:
语法:.(.)Addr可以是:
存在两种处理Virtualhost的方法:基于名称的虚拟主机和基于IP的虚拟主机。
对于基于名称的虚拟主机,您有一个虚拟主机列表,每个虚拟主机管理一个或几个域名,每个虚拟主机与几个listening IP:port相关联。*是一个特殊的值,它意味着这个主机上的所有is。默认的virtualHost是该列表中为每个给定侦听地址声明的第一个。
对于基于IP的VirtualHosts,不使用VirtualHost的ServerName指令,重要的信息是侦听IP (和端口),默认的VirtualHost是第一个匹配IP处理传入请求的VirtualHost。
因此,对于基于命名的虚拟主机配置:
<Virtualhost *:80> with ServerName foo.com的意思是“在这个主机上管理的所有is上”,“在端口80上”,“如果请求主机头是foo.com”,我将使用这个虚拟主机<Virtualhost *:*> with Servername foo.com的意思是“在这个主机上管理的所有is上”,“在所有端口上”,“如果请求主机头是foo.com”,我将使用这个虚拟主机<Virtualhost 10.0.0.2:*> with Servername foo.com的意思是“从我的网络接口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>的意思是“我将使用这个虚拟主机作为主机上的所有其他网络接口,用于端口443上的请求”。<Virtualhost _default_:*>的意思是“如果主机上的其他网络接口与以前的规则不匹配,并且请求主机头与基于名称的虚拟主机不匹配,则将使用此虚拟主机”。所以这一切都是关于定义一个全捕获的虚拟主机。文件补充如下:
当使用基于IP的虚拟主机时,可以指定特殊名称
_default_,在这种情况下,此虚拟主机将匹配其他虚拟主机中没有显式列出的任何IP地址。在没有任何_default_虚拟主机的情况下,当不发生IP匹配时,将使用“主”服务器配置,该配置由任何VirtualHost节之外的所有定义组成。(但请注意,任何与NameVirtualHost指令匹配的IP地址都不会使用“主”服务器配置或_default_虚拟主机。有关详细信息,请参阅基于名称的虚拟主机文档。)
因此,在所有这些事情之后,基于IP的虚拟主机和基于名称的虚拟主机的混合可能会变得一团糟,这是非常“清楚”的。在Apache2.2中,只有在使用NameVirtualhost <something>时才使用基于名称的虚拟主机。
但是用新的Apache2.4版本这些东西确实更容易理解,没有NameVirtualhost声明。除了发出警告外,NameVirtualHost指令不再有任何效果.在多个虚拟主机中出现的任何地址/端口组合都被隐式地视为基于名称的虚拟主机。。没有更复杂的想法,甚至现在的文档也变得更简单了:
_default_,它是*的别名。因此,对于Apache2.4,答案是相同的。
发布于 2014-01-15 01:09:48
所有端口的_default_ vhost
捕获到任何未指定的IP地址和端口的每个请求,即不用于任何其他虚拟主机的地址/端口组合。
http://httpd.apache.org/docs/2.2/vhosts/examples.html#default
https://serverfault.com/questions/567320
复制相似问题