仮想ホスト

仮想ホストは、単一のホスト・マシンが複数のホスト・マシンのように動作できるようにする構成エンティティーです。

仮想ホストは、処理する Multipurpose Internet Mail Extensions (MIME) タイプのリストを保持します。1 つの仮想ホストを 1 つ以上の Web モジュールに関連付けることができますが、各 Web モジュールを関連付けることができる仮想ホストは 1 つのみです。1 つの仮想ホストに関連付けられているリソースは、別の仮想ホストと物理マシンを共有している場合であっても、その別の仮想ホストに関連付けられているリソースとデータを共有できません。

各仮想ホストには、論理名と、識別に使用される 1 つ以上の DNS 別名のリストが設定されます。DNS 別名は、サーブレットの要求に使用される TCP/IP ホスト名とポート番号です (例えば、yourHostName:80)。ポート番号が指定されていない場合、80 であると想定されます。

仮想ホスト構成では、仮想ホスト項目にワイルドカード項目とポートを使用します。
  • デフォルトの別名は、セキュアではない外部ポートを使用する *:80 です。
  • *:9080 という形式の別名では、セキュアではない内部ポートが使用されます。
  • *:9443 という形式の別名では、セキュアな内部ポートが使用されます。
  • *:443 という形式の別名では、セキュアな外部ポートが使用されます。

サーブレット、JavaServer Pages ファイル、 または関連するリソースに対するクライアント要求には、DNS 別名およびリソース固有の URI (Uniform Resource Indicator) が含まれます。 サーブレット、JavaServer Pages ファイル、または関連リソースを求めるクライアント要求を受信すると、DNS 別名がすべての既知の仮想ホスト・グループのリストと比較されて正しい仮想ホストが検出されます。 URI は、すべての既知の URI グループのリストと比較されて正しい URI グループが検出されます。 仮想ホスト・グループと URI グループが見つかった場合、要求が処理のために対応するサーバー・グループに送信され、応答がブラウザーに返されます。一致する仮想ホスト・グループまたは URI グループが見つからなかった場合、エラーがブラウザーに返されます。

仮想ホストは、特定のノードまたはマシンに関連付けられません。これは、ライブ・オブジェクトではなく構成であるため、作成できますが、開始および停止することはできません。アプリケーション・サーバーの初回始動時に、デフォルト仮想ホスト default_host が自動的に構成されます。特にリソースを同じノード (物理マシン) 上の別のリソースと分離する場合を除いて、恐らく、デフォルト仮想ホストに加えて他の仮想ホストを使用する必要はありません。

デフォルト仮想ホストの DNS 別名は *:80 および *:9080 として構成されています。ここで、ポート 80 は HTTP サーバー・ポートであり、ポート 9080 はデフォルト・サーバーの HTTP トランスポートのポートです。デフォルト仮想ホストには、マシンの IP アドレス、短縮ホスト名、完全修飾ホスト名などの一般的な別名が含まれます。このような別名の 1 つが、サーブレットなどのリソースにアクセスするためのパスの最初の部分になります。例えば、要求 http://localhost:80/myServlet では、別名 localhost:80 が使用されています。

リソースを要求すると、製品は要求を定義済み仮想ホストの別名にマップしようとします。仮想ホストの http://host:port/ 部分では大/小文字は区別されませんが、その後の URL では大/小文字が区別されます。URL は英数字が完全一致していなければなりません。ポート番号が異なる場合、異なる別名として扱われます。

例えば、要求 http://www.myhost.com/myservlethttp://WWW.MYHOST.COM/myservlet に正常にマップされますが、http://WWW.MYHOST.COM/MYSERVLETWww.Myhost.Com/Myservlet にはマップされません。後ろの 2 つでは、大/小文字の区別が原因でマッピングが失敗します。要求 http://www.myhost.com/myservlethttp://myhost/myservlethttp://myhost:9876/myservlet に正常にマップされません。これらのマッピング失敗の原因は、英数字が正しくないためです。

ポートを指定し、別名にワイルドカード項目を使用することで、特定のポートでのすべての有効なホスト名とアドレスの組み合わせが特定の仮想ホストにマップされるように指定できます。

定義済み仮想ホストの別名にマップできない別名を使用してリソースを要求した場合、要求の発行に使用したブラウザーで 404 エラーを受け取ることになります。メッセージで、仮想ホストが見つからなかったと示されます。

仮想ホストについて 2 つの関連付けが行われます。アプリケーション・デプロイメントはアプリケーションを仮想ホストに関連付けます。仮想ホスト定義は、マシンのネットワーク・アドレスとアプリケーション・サーバーの HTTP トランスポートまたは Web サーバー・ポート割り当てを仮想ホストに関連付けます。例えば、スヌープ・サーブレットに対する Web クライアント要求からのフローでは、以下のアクションが行われます。
  1. Web クライアントが Web アドレス http://www.some_host.some_company.com:9080/snoop でスヌープ・サーブレットを要求します。
  2. some_host マシンでは、9080 ポートがスタンドアロン・アプリケーション・サーバー server1 に割り当てられています。
  3. server1 が仮想ホスト割り当てを確認して、別名 some_host.some_company.com:9080 に割り当てられている仮想ホストを判別します。
  4. アプリケーション・サーバーが、その DNS ストリングに対する明示的な別名が存在しないことを認識します。ただし、ポート 9080 におけるホスト名 * のワイルドカードの割り当ては存在するため、このワイルドカードは一致するものになります。この一致を定義している仮想ホストは default_host です。
  5. アプリケーション・サーバーが、default_host にデプロイされているアプリケーションを確認し、スヌープ・サーブレットを見つけます。
  6. アプリケーション・サーバーが、アプリケーションのサービスを Web クライアントに提供し、要求側がスヌープ・サーブレットを使用できます。
表 1. 仮想ホストの別名
仮想ホスト 別名 ポート番号
default_host * 9080
default_host localhost 9080
default_host my_machine 9080
default_host my_machine.my_company.com 9080
default_host localhost 80

1 つの仮想ホストに対して任意の数の別名を設定できます。以下のように、別名が重複しても構いません。

アプリケーション・サーバーは、Web クライアント・アドレスに指定されている明示的アドレスを使用して一致を検索します。ただし、明示的アドレスに一致する前に、パターンに一致する他の別名に対する一致が解決されることがあります。別名リストで最初にある別名を定義しても、一致する別名の製品による検索で検索順序は保証されません。

別名が重複している仮想ホスト。admin_host に対してポート 9060 の代わりに誤ってポート 9080 を定義したため、両方の仮想ホストに重複した別名を定義したものとします。

2 つの異なる仮想ホストに対して同じ別名を使用した場合、問題が発生する可能性があります。例えば、default_host にデフォルト・アプリケーションおよびスヌープ・サーブレットをインストールしたものとします。admin_host という名前の別の仮想ホストがあるものとします。ただし、admin_host にはデフォルト・アプリケーションもスヌープ・サーブレットもインストールしていません。

表 2. 別名が重複している仮想ホスト。
仮想ホスト 別名 ポート番号
default_host * 9080
default_host localhost 9080
admin_host * 9060
admin_host my_machine.com 9080

http://my_machine.com:9080/snoop の Web クライアント要求を受け取った場合を考えます。

アプリケーション・サーバーが *:9080 に対して要求を一致させた場合、アプリケーションのサービスは default_host から提供されます。アプリケーション・サーバーが my.machine.com:9080 に要求を一致させた場合、アプリケーションは見つかりません。要求を発行したブラウザーで 404 エラーが発生します。メッセージで、仮想ホストが見つからなかったと示されます。

この問題が発生するのは、別名が一致した最初の仮想ホストで、要求されたアプリケーションが見つからないためです。別名の正しいコーディング方法では、着信要求での別名がすべての仮想ホスト定義の中で 1 つの仮想ホストのみに一致するようにします。URL が複数の仮想ホストに一致する可能性がある場合、上述の問題が発生します。


トピックのタイプを示すアイコン 概念トピック

ファイル名: cwlp_virtual_hosts_ovr.html