首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_default_:*与*:*在VirtualHost上下文中的区别

问_default_:*与*:*在VirtualHost上下文中的区别
EN

Server Fault用户
提问于 2014-01-15 00:40:28
回答 2查看 56.7K关注 0票数 52

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

代码语言:javascript
复制
<VirtualHost _default_:*>
  #...
  ServerName host.example.com
  #...
</VirtualHost>

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

我不知道它有什么区别,也不知道它的用途。

特克

EN

回答 2

Server Fault用户

发布于 2014-01-15 11:02:37

解决方案位于Apache2.2文档关于Virtualhost指令上:

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

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

存在两种处理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指令不再有任何效果.在多个虚拟主机中出现的任何地址/端口组合都被隐式地视为基于名称的虚拟主机。。没有更复杂的想法,甚至现在的文档也变得更简单了:

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

因此,对于Apache2.4,答案是相同的。

票数 59
EN

Server Fault用户

发布于 2014-01-15 01:09:48

所有端口的_default_ vhost

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

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

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/567320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档