VirtualHost 上下文中 _default_:* 和 *:* 之間的區別

VirtualHost 上下文中 _default_:* 和 *:* 之間的區別

我想知道之間的區別預設:*”“*:*”在虛擬主機上下文中。

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

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

我不知道差別和用途。

Thk

答案1

解決方案位於 Apache 2.2 文件中關於虛擬主機指令

文法:... (...) 地址可以是:

  • 虛擬主機的IP位址;
  • 虛擬主機 IP 位址的完全限定網域名稱(不建議);
  • 人物 *,僅與以下組合使用名稱虛擬主機* 符合所有IP位址;或者
  • 字串_預設_,僅與IP虛擬主機捕獲不匹配的 IP 位址。

有兩種處理虛擬主機的方法:基於名稱的虛擬主機和基於 IP 的虛擬主機。

使用基於命名的虛擬主機,您有一個虛擬主機列表,每個虛擬主機管理一個或多個域名,並且每個虛擬主機與幾個listening IP:port.*是一個特殊的值,這意味著該主機上的所有IP。對於每個給定的偵聽位址,預設的 virtualHost 是該清單中第一個聲明的虛擬主機。

對於基於 IPServerName的 VirtualHosts,不使用 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_:*>意思是“如果我的主機上的所有其他網路介面與該虛擬主機不匹配,並且請求主機標頭與基於命名的虛擬主機不匹配,我將使用此虛擬主機”

所以這一切都是為了定義一個包羅萬象的虛擬主機。文件新增:

使用基於 IP 的虛擬主機時,可以指定特殊名稱,_default_在這種情況下,該虛擬主機將與另一個虛擬主機中未明確列出的任何 IP 位址相符。在沒有任何虛擬主機的情況下,_default_當沒有發生 IP 匹配時,將使用由任何 VirtualHost 部分之外的所有這些定義組成的「主」伺服器配置。 (但請注意,任何與 NameVirtualHost 指令匹配的 IP 位址都不會使用「主」伺服器配置或_default_虛擬主機。有關更多詳細信息,請參閱基於名稱的虛擬主機文件。)

因此,在經歷了所有這些事情之後,「很明顯」混合基於 IP 和基於名稱的虛擬主機可能會變得一團糟。對於 Apache 2.2,僅在NameVirtualhost <something>使用時才使用基於名稱的虛擬主機。

與新的阿帕契2.4版本這些東西確實比較容易理解,無需NameVirtualhost聲明。除了發出警告之外,NameVirtualHost 指令不再有任何作用。在多個虛擬主機中出現的任何位址/連接埠組合都將隱式視為基於名稱的虛擬主機。沒有更複雜的想法,甚至連文件現在也更簡單了:

  • 字元*,充當通配符並匹配任何IP 位址。
  • 字串_default_,它是 * 的別名

所以對 apache 2.4 來說答案是,這是同一件事

答案2

_default_所有連接埠的虛擬主機

擷取對任何未指定的 IP 位址和連接埠(即未用於任何其他虛擬主機的位址/連接埠組合)的每個請求。

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

相關內容