VirtualHost Contextの「デフォルト:*」 と 「*:*」の違いを知りたい。
<VirtualHost _default_:*>
#...
ServerName host.example.com
#...
</VirtualHost>
<VirtualHost *:*>
#...
ServerName host.example.com
#...
</VirtualHost>
使用の違いとその目的がわかりません。
Thk
VirtualHost Contextの「デフォルト:*」 と 「*:*」の違いを知りたい。
<VirtualHost _default_:*>
#...
ServerName host.example.com
#...
</VirtualHost>
<VirtualHost *:*>
#...
ServerName host.example.com
#...
</VirtualHost>
使用の違いとその目的がわかりません。
Thk
回答:
解決策は、Virtualhostディレクティブに関するApache 2.2ドキュメントにあります。
構文:...(...)Addrは次のいずれかです。
- 仮想ホストのIPアドレス。
- 仮想ホストのIPアドレスの完全修飾ドメイン名(非推奨)。
- 文字*。これは、すべてのIPアドレスと一致するためにNameVirtualHost *と組み合わせてのみ使用されます。または
- 文字列_default_は、IP仮想ホスティングでのみ使用され、一致しないIPアドレスをキャッチします。
仮想ホストの処理には、名前ベースの仮想ホスティングとIPベースの仮想ホスティングの2つの方法があります。
名前ベースの仮想ホストを使用すると、仮想ホストのリストがあり、それぞれが1つまたは複数のドメイン名を管理し、それぞれがカップルに関連付けられていlistening IP:port
ます。*
は、このホスト上のすべてのIPを意味する特別な値です。デフォルトのvirtualHostは、指定されたリスニングアドレスごとにこのリストで最初に宣言されたものです。
IPベースのVirtualHostsでは、VirtualHostのServerName
ディレクティブは使用されません。重要な情報はリッスンする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_
仮想ホストが存在しない場合、VirtualHostセクション以外のすべての定義で構成される「メイン」サーバー設定は、IPマッチが発生しないときに使用されます。(ただし、NameVirtualHostディレクティブに一致するIPアドレスは、「メイン」サーバー構成も_default_
仮想ホストも使用しないことに注意してください。詳細については、名前ベースの仮想ホスティングのドキュメントを参照してください。)
したがって、これらすべての事柄の後、IPベースの仮想ホスティングと名前ベースの仮想ホスティングを混在させることは混乱になりかねないことが非常に「明確」になります。Apache 2.2では、名前ベースの仮想ホスティングが使用された場合NameVirtualhost <something>
にのみ使用されました。
しかし、新しいApache 2.4バージョンでは、これらのことは本当にわかりやすく、NameVirtualhost
宣言はありません。NameVirtualHostディレクティブは、警告を発する以外の効果はありません。複数の仮想ホストに現れるアドレス/ポートの組み合わせは、名前ベースの仮想ホストとして暗黙的に扱われます。これ以上複雑ではありませんが、ドキュメントさえもシンプルになりました。
- 文字*。ワイルドカードとして機能し、任意のIPアドレスと一致します。
- 文字列
_default_
、これは*のエイリアスです
したがって、Apache 2.4での答えは、同じことです。
_default_
すべてのポートの仮想ホスト
指定されていないIPアドレスとポート、つまり、他の仮想ホストに使用されていないアドレス/ポートの組み合わせに対するすべてのリクエストをキャッチします。
http://httpd.apache.org/docs/2.2/vhosts/examples.html#default