web-dev-qa-db-ja.com

VirtualHostコンテキストの_default _:*と*:*の違い

"default:*""*:*"の違いを知りたいVirtualHostコンテキスト内。

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

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

使い方の違いやポーポースはわかりません。

じゃあ

38
Luigi Giuseppe

解決策はApache 2.2のドキュメントにあります Virtualhostディレクティブに

構文:...(...)Addrは次のいずれかです。

  • 仮想ホストのIPアドレス。
  • 仮想ホストのIPアドレスの完全修飾ドメイン名(非推奨)。
  • 文字*は、NameVirtualHost*との組み合わせでのみ使用されますすべてのIPアドレスに一致します。または
  • 文字列_default _は、キャッチするためにIP仮想ホスティングでのみ使用されます一致しないIPアドレス。

仮想ホストの処理には、名前ベースの仮想ホスティングとIPベースの仮想ホスティングという2つの方法があります。

名前ベースの仮想ホストでは、仮想ホストのリストがあり、それぞれが1つまたは複数のドメイン名を管理し、それぞれがカップルlistening IP:portに関連付けられています。 *は、このホスト上のすべてのIPを意味する特別な値です。デフォルトのvirtualHostは、指定されたリスニングアドレスごとに、このリストで最初に宣言されたものです。

IPベースのVirtualHostsでは、VirtualHostのServerNameディレクティブは使用されません。重要な情報はリスニング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>が使用された場合にのみ、名前ベースの仮想ホスティングが使用されました。

しかし 新しいApache 2.4バージョンの場合 これらのことは本当に理解しやすく、NameVirtualhost宣言はありません。 NameVirtualHostディレクティブは、警告を出す以外に効果がなくなりました。複数の仮想ホストに現れるアドレス/ポートの組み合わせは、暗黙的に名前ベースの仮想ホストとして扱われます 。これ以上複雑ではありませんが、ドキュメントも簡単になりました。

  • ワイルドカードとして機能し、任意のIPアドレスと一致する文字*。
  • *のエイリアスである文字列_default_

したがって、Apache 2.4での答えは同じです

44
regilero

_default_すべてのポートのvhosts

未指定のIPアドレスとポート、つまり他の仮想ホストには使用されないアドレスとポートの組み合わせへのすべての要求をキャッチします。

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

0
Jacek Lakomiec