仮想ホストとは、単一のホスト・マシンを、複数のホスト・マシンに見せかけて使用できるようにする構成エンティティーです。処理する Multipurpose Internet Mail Extensions (MIME) タイプのリストを保守します。仮想ホストを 1 つ以上の Web モジュールに関連付けることができますが、各 Web モジュールは、1 つの仮想ホストにのみ関連付けることができます。ある仮想ホストに関連付けられたリソースと、 他の仮想ホストに関連付けられたリソースとは、それらの仮想ホストが物理的に同じマシンを共用している場合でも、 データを共用することはできません。
個々の仮想ホストには論理名があり、1 つ以上の DNS 別名のリストがあります。 仮想ホストはこの別名によって認識されます。DNS 別名は、TCP/IP のホスト名およびポート番号で、 サーブレットを要求する際に使用されます (例: yourHostName:80)。 ポート番号が指定されていない場合は、80 と想定されます。
仮想ホストの構成では、仮想ホスト項目のポートについてワイルドカード項目を使用します。
サーブレット、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 アドレス、短縮ホスト名、完全修飾ホスト名といった一般的な別名が組み込まれています。これらの別名には、サーブレットなどのリソースにアクセスするためのパスの最初の部分が含まれます。例えば、 要求 http://localhost:80/myServlet. では、 localhost:80 が別名です。
仮想ホストにローカル・ホストを追加すると、 別名テーブルにローカル・ホスト・マシンのホスト名と IP アドレスが追加されます。 これによって、リモート・ユーザーは、管理コンソールにアクセスできるようになります。
デフォルト以外のポートを使用したければ、管理コンソールを使用して、DNS 別名を追加または変更できます。DNS 別名を変更する場合は、Web サーバーのプラグイン構成を再生成する必要があります。 管理コンソールを使用して、プラグインの再生成を開始できます。
ユーザーがリソースを要求すると、WebSphere Application Server は、 その要求を定義済み仮想ホストの別名にマップしようとします。仮想ホストの http://host:port/ 部分では大/小文字を区別しませんが、 その後に続く URL では大/小文字を区別します。URL の英数字は正確に一致する必要があります。 ポート番号が異なると、別の別名として扱われます。
例えば、要求 http://www.myhost.com/myservlet は http://WWW.MYHOST.COM/myservlet には正常にマップされますが、 http://WWW.MYHOST.COM/MYSERVLET または Www.Myhost.Com/Myservlet には正常にマップされません。 後の 2 つの場合、マッピングは、大/小文字の区別が原因で失敗します。 要求 http://www.myhost.com/myservlet は、 http://myhost/myservlet または http://myhost:9876/myservlet には正常にマップされません。 これらのマッピングは、英数字が正確でないために失敗します。
ユーザーはポートごとの別名にワイルドカード項目を使用でき、特定のポートについて、ホスト名とアドレスのすべての有効な組み合わせを、特定の仮想ホストにマップするように指定できます。
定義済み仮想ホストの別名にマップできない別名を使用してユーザーがリソースを要求すると、 その要求の送信に使用したブラウザーでエラー 404 を受け取ります。メッセージにより、仮想ホストが見付からないことが伝えられます。
仮想ホスト | 別名 | ポート |
---|---|---|
default_host | * | 9080 |
localhost | 9080 | |
my_machine | 9080 | |
my_machine.my_company.com | 9080 | |
localhost | 80 |
Application Server は、Web クライアント・アドレスに指定される明示アドレスを使用して一致を検索します。 ただし、明示アドレスを突き合わせる前に、パターンが一致する別の別名との一致を検出できる場合があります。 別名のリストで最初に別名を定義するだけでは、 WebSphere Application Server が一致する別名を検索する際の検索順序が保証されるわけではありません。
2 つの異なる仮想ホストに同じ別名を使用している場合、問題が発生することがあります。 例えば、デフォルトのアプリケーションおよび default_host にスヌープ・サーブレットをインストールしていると想定します。 また、admin_host と呼ばれる別の仮想ホストも持っていますが、 admin_host にデフォルト・アプリケーションやスヌープ・サーブレットはインストールされていません。
仮想ホスト | 別名 | ポート |
---|---|---|
default_host | * | 9080 |
localhost | 9080 | |
admin_host | * | 9060 |
my_machine.com | 9080 |
Web クライアント要求が http://my_machine.com:9080/snoop に来ると想定します。
アプリケーション・サーバーが *:9080 に対する要求と一致する場合は、 アプリケーションは default_host から提供されます。 アプリケーション・サーバーが my.machine.com:9080 に対する要求と一致する場合は、アプリケーションは見つかりません。 要求の発行元ブラウザーに 404 エラーが表示されます。 メッセージにより、仮想ホストが見付からないことが伝えられます。
この問題は、一致する別名がある最初の仮想ホストで要求されたアプリケーションを 見付けられなかった結果です。 別名をコード化する正しい方法は、着信要求の別名をご使用の 仮想ホスト定義すべてで、1 つの仮想ホストに一致させることです。 URL が複数の仮想ホストと一致する場合は、上記のような問題が発生します。