リダイレクトを使用して、ある URL から別の URL へ要求をリダイレクトします。たとえば、リダイレクトを使用して、ユーザーを別の Web サイトに送信したり (旧バージョンのアプリケーションから新しいバージョンへリダイレクトする場合など)、HTTP から HTTPS へ、または HTTPS から HTTP へ送信したりします。アプリケーション内でリダイレクトを有効にする方法はいくつもあります (たとえば、servlet ベースのリダイレクト、web.xml リダイレクト)。ただし、ロードバランサを通してリダイレクト URL を送信するには、Enterprise Server またはロードバランサに対していくつか追加設定が必要な場合があります。リダイレクトは HTTPS ルーティングを使用して転送される要求とは異なるので注意してください。リダイレクトを使用するときには、httpsrouting を false に設定します。HTTPS 要求を HTTP に転送するように設定する場合は、「HTTPS ルーティング」を使用します。
リダイレクトに影響するプロパティーは次のとおりです。 HTTP サービスまたは HTTP リスナーの authPassthroughEnabled および proxyHandler プロパティーと、loadbalancer.xml ファイル内の rewrite-location プロパティー。
Enterprise Server authPassthroughEnabled プロパティーを true に設定した場合、カスタムな要求ヘッダーを使用して、元のクライアント要求に関する情報 (クライアント IP アドレス、SSL キーサイズ、認証されたクライアント証明書チェーンなど) が HTTP リスナーへ送信されます。authPassThroughEnabled プロパティーを使用すると、ハードウェアアクセラレータ (インストールされている場合) を利用して SSL 認証をより高速にできます。ハードウェアアクセラレータの設定は、クラスタ化されたそれぞれの Enterprise Server インスタンス上よりも、ロードバランサ上で行う方が簡単です。
authPassthroughEnabled は、Enterprise Server がファイアウォールの後ろにある場合のみ true に設定します。
asadmin set コマンドを使用して、HTTP サービスまたは個別の HTTP リスナー上に authPassthroughEnabled プロパティーを設定します。個別の HTTP リスナーに対する設定は、HTTP サービスに対する設定よりも優先されます。
すべての HTTP および HTTPS リスナー上に authPassthroughEnabled プロパティーを設定するには、次のコマンドを使用します。
asadmin set cluster-name-config.http-service.property.authPassthroughEnabled=true
このプロパティーを個別のリスナー上に設定するには、次のコマンドを使用します。
asadmin set cluster-name-config.http-service.http-listener.listener-name.property.authPassthroughEnabled=true
Enterprise Server のプロキシハンドラは、プロキシサーバー (この場合はロードバランサ) によって遮断されてサーバーに転送された元のクライアント要求に関する情報を取得し、クライアント要求のターゲットである配備された Web アプリケーションでこの情報を使用できるようにする役目を担っています。遮断するプロキシサーバーが SSL の終端となる場合、プロキシハンドラは、元の要求が HTTPS 要求であったのか、SSL クライアント認証が有効なのかなど元の要求に関する追加の情報を取得して使用可能にします。proxyHandler プロパティーは、authPassThroughEnabled が true に設定されている場合のみ使用します。
プロキシハンドラは、プロキシサーバーが元のクライアント要求に関する情報を伝達するのに使用するカスタムな要求ヘッダーについて着信要求を調べ、標準の ServletRequest API を使用してこの情報を Web アプリケーションで使用できるようにします。
プロキシハンドラの実装は、proxyHandler プロパティーを使用して、HTTP サービスレベルでグローバルに設定することも、個別の HTTP リスナーに対して設定することもできます。このプロパティーの値は、com.sun.appserv.ProxyHandler 抽象クラスの実装の完全修飾クラス名を指定します。設定可能なプロキシハンドラの実装が、HTTP 要求ヘッダー名について認識し、プロキシサーバーが元のクライアント要求に関する情報を伝達するのに使用する値の書式を理解しているかぎり、プロキシハンドラの実装によってサーバーは任意のプロキシサーバーで動作できます。
Enterprise Server のプロキシハンドラは、要求ヘッダーから SSL 証明書チェーンを読み込んで解析します。これによって、バックエンドのインスタンスは、SSL 終端となるプロキシサーバー (ここではロードバランサ) によって遮断された元のクライアント要求に関する情報を取得できるようになります。デフォルトのプロキシハンドラ設定を使用することも、HTTP サービスまたは HTTP/HTTPS リスナーの proxyHandler プロパティーを使用してユーザー設定することもできます。proxyHandler プロパティーでは、そのリスナーまたはすべてのリスナーによって使用される com.sun.appserv.ProxyHandler 抽象クラスのカスタム実装の完全修飾クラス名を指定します。
この抽象クラスの実装は、インスタンスへの元のクライアント要求に関する情報を伝達するためにプロキシサーバーが使用するカスタム要求ヘッダーに対して行われる特定の要求を調べ、その情報を呼び出し元に返します。デフォルトの実装では、Proxy-ip という名前の HTTP 要求ヘッダーからクライアント IP アドレスを、Proxy-keysize という名前の HTTP 要求ヘッダーから SSL キーサイズを、Proxy-auth-cert という名前の HTTP 要求ヘッダーから SSL クライアント証明書チェーンを読み取ります。Proxy-auth-cert 値には、BEGIN CERTIFICATE および END CERTIFICATE の境界がなく、\n が % d% a によって置き換えられた BASE-64 エンコードのクライアント証明書チェーンを含む必要があります。
このプロパティーは、authPassThroughEnabled を true に設定した場合のみ使用できます。個別の HTTP または HTTPS リスナー上に proxyHandler プロパティーを設定すると、すべてのリスナーのデフォルト設定が上書きされます。
asadmin set コマンドを使用して、HTTP サービスまたは個別の HTTP リスナー上に proxyHandler プロパティーを設定します。
proxyHandler プロパティーを、すべての HTTP および HTTPS リスナー上に設定するには、次のコマンドを使用します。
asadmin set cluster-name-config.http-service.property.proxyHandler=classname |
このプロパティーを個別のリスナー上に設定するには、次のコマンドを使用します。
asadmin set cluster-name-config.http-service.http-listener.listener-name.property.proxyHandler=classname |
rewrite-location プロパティーを true に設定すると、元の要求情報が書き換えられ、プロトコル (HTTP または HTTPS)、ホスト、およびポートの情報が追加されます。デフォルトでは、以前のリリースの Enterprise Server との後方互換性を保つために、rewrite-location プロパティーは true に設定されます。
rewrite-location プロパティーは、asadmin create-http-lb-config コマンドを介して使用することはできません。プロパティーを使用するには、次のように asadmin set コマンドを使用します。
asadmin set domain.lb-configs.load-balancer-config.property.rewrite-location=false
rewrite-location プロパティーを設定するときには、次の点に注意します。
httpsrouting が false で、Enterprise Server 上で authPassthroughEnabled が有効でない場合は、rewrite-location プロパティーを true に設定します。authPassthroughEnabled が有効でない場合、Enterprise Server は元の要求のプロトコル (HTTP または HTTPS) を認識しません。rewrite-location を true に設定することで、ロードバランサは書き換えの場所のプロトコル部分を適切に変更します。つまり、クライアントが HTTPS 要求を送信していれば、ロードバランサはクライアントをロードバランサ上の HTTPS が有効になっているリスナーポートにリダイレクトします。このプロセスは HTTP 要求の場合と同じです。
httpsrouting が false で、authPassthroughEnabled が Enterprise Server 上で有効になっている場合、Enterprise Server はクライアント要求が HTTP と HTTPS のどちらであるのかを認識しているので、rewrite-location を true または false に設定することができます。authPassthroughEnabled が有効になっている場合、Enterprise Server は書き換えの場所のプロトコル部分を適切に変更します。rewrite-location が false に設定されている場合、ロードバランサはリダイレクトされた URL の場所を書き換えません。true に設定されている場合は、リダイレクトされた URL の場所を書き換えます。しかしこの書き換えは、Enterprise Server がクライアントからの HTTPS 接続を認識していれば必要ありません。また、アプリケーションが HTTP から HTTPS または HTTPS から HTTP にリダイレクトする必要のある場合、rewrite-location パラメータを false に設定する必要があります。