仮想ホストの使用
アプリケーションとアプリケーションにサービスを提供するエンドポイントを分離する場合、仮想ホストを使用できます。
多くの場合、単一のアプリケーション・サーバーが、複数の異なるホストおよびポート構成からの要求に応答しています。これは、名前が異なる複数のネットワーク・インターフェースを備えたマシンで実行されている、HTTP サーバー、プロキシー、またはロード・バランサーからルーティングされている等のさまざまな理由が組み合わさってそうなっています。このような場合、特定のホストから接続できるアプリケーションを制御することができます。仮想ホストがこの機能を提供します。これは、構成されているホスト別名リストに対して、要求されたホスト名とポート番号 (HTTP ホスト・ヘッダーから判別) を突き合わせます。
WebSphere Application Server Liberty では、デフォルト構成で十分です。デフォルト仮想ホスト (default_host) は、着信したホストとポートの組み合わせからの要求を突き合わせて、デフォルト・アプリケーション・コンテナーに転送します。
- virtualHost 構成エレメント ID 値。
- hostAlias サブエレメント構成。
- allowFromEndpoint サブエレメント構成 (使用する場合)。
- WAR の ibm-web-bnd.xml または ibm-web-bnd.xmi ファイルでの仮想ホスト構成。
- httpEndpoint のホスト属性値。
- httpEndpoint の ID 属性値。
2 つのアプリケーションの分離
<httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" />
<httpEndpoint id="alternateEndpoint" host="*" httpPort="9081" />
<virtualHost id="application-1">
<hostAlias>your_host_name:9080</hostAlias>
</virtualHost>
<virtualHost id="application-2">
<hostAlias>localhost:9081</hostAlias>
</virtualHost>
<enterpriseApplication location="myApp.ear" name="App1"/>
<webApplication location="myApp2.war" name="App2" />
defaultHttpEndpoint はポート 9080 ですべてのインターフェースを公開し、alternateEndpoint はポート 9081 ですべてのインターフェースを公開しています。
App1 に、<virtual-host name="application-1"/> と指定している ibm-web-bnd.xml ファイルが含まれている WAR ファイルがある場合、このアプリケーションには、your_host_name:9080/app1_context_root でのみアクセスできます。
App2 (WAR) に、<virtual-host name="application-2"/> と指定している ibm-web-bnd.xml ファイルがある場合、このアプリケーションには、localhost:9081/app2_context_root でのみアクセスできます。
特定の仮想ホストを指定していない 3 つ目のアプリケーションがデプロイされた場合、この構成では、そのアプリケーションにアクセスできるのは、別のポートを指定している HOST ヘッダーが含まれているプロキシー要求の場合のみです。例えば、要求がポート 80 でプロキシーに対して行われた場合、そのポートが hostAlias の指定にリストされていないため、要求は default_host 仮想ホストにルーティングされます。
要求されたホストまたはポートに基づいたアプリケーションの分離
- 仮想ホスト名を決定し、新規の (非デフォルト) ホストを参照するようにアプリケーションを更新します。virtual-host エレメントを WAR の ibm-web-bnd.xml または ibm-web-bnd.xmi ファイルに追加します。
<?xml version="1.0" encoding="UTF-8"?> <web-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xmk/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd" version="1.0" /> <virtual-host name="proxiedRequests" /> </web-bnd>
- virtualHost エレメントを server.xml ファイルに追加します。名前は、アプリケーションで指定されているものに一致している必要があり、また新規仮想ホストにルーティングされる hostAliases を定義する必要があります。注: 突き合わされるホスト名とポートは、ユーザーによって元々要求されたものであり、これらは Liberty が使用しているホストとポートに一致している場合も一致していない場合もあります。以下の例では、server.xml ファイルに追加される仮想ホストエレメントを示します。
<virtualHost id="proxiedRequests"> <hostAlias>external.host.name:80</hostAlias> <hostAlias>external.host.name:443</hostAlias> </virtualHost>
要求がプロキシーからのものである場合、この構成だけで、プロキシーのホストおよびポートに対する要求が「proxiedRequests」仮想ホストにルーティングされます。
発信元エンドポイントに基づいたアクセスの制限
- 別の httpEndpoint を定義します。以下の例では、別の httpEndpoint を示します。
<httpEndpoint id="localHostOnly" host="localhost" httpPort="9081" httpsPort="9444"/>
この HTTP エンドポイントは、host="localhost" と指定しているため、ポート 9081 および 9444 は localhost インターフェースでのみ公開されます。
- virtualHost 定義を更新して、allowFromEndpointRef 属性を指定します。この属性が指定されている場合、virtualHost は、指定エンドポイントからの要求のみを受け入れます。例:
<virtualHost id="default_host" allowFromEndpointRef="localHostOnly"> <hostAlias>*:9081</hostAlias> <hostAlias>*:9444</hostAlias> </virtualHost> </virtualHost id="proxiedRequests"> <hostAlias>*:9080</hostAlias> <hostAlias>*:9443</hostAlias> <hostAlias>external.host.name:80</hostAlias> <hostAlias>external.host.name:443</hostAlias> </virtualHost>
この構成では、以下のようになります。- default_host 仮想ホストは、localHostOnly エンドポイントを発信元とする localhost:9081 および localhost:9444 で送信された要求のみを受け入れるようになっています。ポート 9081 および 9444 への他の要求はすべて拒否されます。例えば、localhost:9081 を参照するホスト・ヘッダーを持つ defaultHttpEndpoing からの要求は拒否されます。
- proxiedRequests 仮想ホストは、プロキシーからの外部ホスト名とポート 80 または 443 を参照するホスト・ヘッダーを持つ要求に加え、ポート 9080 または 9443 (defaultHttpEndpoint で使用されるデフォルト・ポート) に対して発行されたすべての要求を受け入れるようになっています。