
違いを知りたい「デフォルト:*" そして 「*:*」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 ベースの仮想ホスティングの 2 つがあります。
名前ベースの仮想ホストでは、仮想ホストのリストがあり、それぞれが1つまたは複数のドメイン名を管理し、それぞれがいくつかの.に関連付けられていますlistening IP:port
。*
は特別な値であり、このホスト上のすべてのIPデフォルトの virtualHost は、指定された各リスニング アドレスに対してこのリストで最初に宣言されたものです。
IP ベースの VirtualHosts では、ServerName
VirtualHost のディレクティブは使用されません。重要な情報は、リッスンしている IP (およびポート) であり、デフォルトの VirtualHost は、着信要求を処理する IP と一致する最初のものになります。
したがって、名前ベースの仮想ホスティング構成では次のようになります。
<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_
すべてのポートのvhost
指定されていない IP アドレスとポート (つまり、他の仮想ホストでは使用されていないアドレス/ポートの組み合わせ) へのすべての要求をキャッチします。