VirtualHost 上下文中 _default_:* 和 *:* 之间的区别

VirtualHost 上下文中 _default_:* 和 *:* 之间的区别

我想知道默认:*”“*:*”在 VirtualHost 上下文中。

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

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

我不知道它们的区别和用途。

谢谢

答案1

解决方案请参阅 Apache 2.2 文档在 Virtualhost 指令上

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

  • 虚拟主机的IP地址;
  • 虚拟主机 IP 地址的完全限定域名(不推荐);
  • 人物 *,仅与名称虚拟主机* 匹配所有 IP 地址;或
  • 字符串 _default_,仅用于IP虚拟主机捕获不匹配的 IP 地址。

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

使用基于名称的虚拟主机,您将获得一个虚拟主机列表,每个虚拟主机管理一个或多个域名,并且每个虚拟主机都与一对域名相关联listening IP:port*是一个特殊值,这意味着此主机上的所有 IP。默认的 virtualHost 是此列表中为每个给定的监听地址声明的第一个虚拟主机。

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

因此,使用基于命名的虚拟主机配置:

  • <Virtualhost *:80> with ServerName foo.com表示“在此主机上管理的所有 IP”、“在端口 80 上”、“如果请求主机标头是 foo.com”,我将使用此虚拟主机
  • <Virtualhost *:*> with Servername foo.com表示“在此主机上管理的所有 IP”、“在所有端口上”、“如果请求主机头是 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_:*>意思是“如果与上一条规则不匹配,并且请求主机头与基于命名的虚拟主机不匹配,我将把这个虚拟主机用于主机上的所有其他网络接口”

因此,一切都围绕定义一个万能的虚拟主机展开。文档补充道:

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

因此,在经历了所有这些事情之后,我们“清楚地”认识到,混合基于 IP 和基于名称的虚拟主机可能会变得一团糟。在 Apache 2.2 中,仅当NameVirtualhost <something>使用时才使用基于名称的虚拟主机。

有了新的Apache 2.4版本这些东西确实更容易理解,无需NameVirtualhost声明。NameVirtualHost 指令不再有任何作用,除了发出警告。出现在多个虚拟主机中的任何地址/端口组合都被隐式视为基于名称的虚拟主机。不再有复杂的想法,甚至文档现在也更简单了:

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

因此,对于 apache 2.4,答案是,这是同一件事

答案2

_default_所有端口的虚拟主机

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

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

相关内容