![]() |
![]() |
|
|
| |
Apache HTTP Server プラグインのインストールとコンフィグレーション
以降の節では、Apache HTTP Server プラグインをインストールおよびコンフィグレーションする方法について説明します。
Apache HTTP Server プラグインを使用すると、Apache HTTP サーバから WebLogic Server へリクエストをプロキシできます。このプラグインは、WebLogic Server の動的な機能を必要とするリクエストを WebLogic Server が処理できるようにすることによって Apache を拡張します。
このプラグインは、Apache サーバが静的ページを提供している環境で使用されることを想定しています。ドキュメント ツリーの他の部分(HTTP サーブレットや JavaServer Pages によって最も適切な状態で生成される動的ページ)は、別のプロセス(おそらく別のホスト)で動作している WebLogic Server に委託されます。それでも、エンド ユーザ(ブラウザ)では、WebLogic Server に委託される HTTP リクエストは同じソースから来ているものと認識されます。
HTTP トンネリングもこのプラグインを通じて機能でき、ブラウザ以外のクライアントが WebLogic Server サービスにアクセスすることを可能にします。
Apache HTTP Server プラグインは、Apache HTTP サーバ内の Apache モジュールとして機能します。Apache モジュールは起動時に Apache サーバによってロードされ、特定の HTTP リクエストがそこに委託されます。Apache モジュールは、HTTP サーブレットと似ていますが、プラットフォームにネイティブなコードで記述されています。
Apache バージョン 1.3.x のキープアライブ接続
Apache HTTP Server プラグインはリクエストごとにソケットを作成し、応答を読み込んでからソケットを閉じます。Apache HTTP サーバは多重処理されるため、WebLogic Server と Apache HTTP Server プラグインの間では接続プールとキープアライブ接続はサポートされていません。
Apache バージョン 2.x のキープアライブ接続
Apache HTTP Server プラグインは、WebLogic Server との接続の再利用可能なプールを使用してパフォーマンスを向上させます。このプラグインは、同じクライアントからの後続リクエストにプール内の同じ接続を再利用することで、WebLogic Server との間で HTTP 1.1 キープアライブ接続を実装します。接続が 30 秒(またはユーザ定義の時間)を超えて非アクティブな場合、その接続は閉じて、プールに返されます。この機能は、必要に応じて無効にできます。詳細については、 KeepAliveEnabledを参照してください。
リクエストのプロキシ
このプラグインは、指定されたコンフィグレーションに基づいてリクエストを WebLogic Server にプロキシします。リクエストは、リクエストの URL(または URL の一部)に基づいてプロキシできます。この方法は、パスによるプロキシ、と呼びます。リクエストのプロキシは、要求されたファイルの MIME タイプに基づいて行うこともできます。さらに、前述の方法を組み合わせて利用することもできます。リクエストが両方の基準に一致する場合、そのリクエストはパスを基準にプロキシされます。リクエストの種類ごとに、プラグインの補足的な動作を定義する追加パラメータを指定することもできます。詳細については、 Apache HTTP Server プラグインのコンフィグレーションを参照してください。
Apache HTTP Server プラグインは、Linux、Solaris、および HPUX11でサポートされています。Apache の特定バージョンのサポートについては、「動作確認情報」を参照してください。
Apache HTTP Server プラグインのインストール
Apache HTTP Server プラグインは、Apache HTTP サーバの Apache モジュールとしてインストールします。モジュールは、動的共有オブジェクト(DSO)または静的リンク モジュールとしてインストールされます。静的リンク モジュールとしてのインストールは、Apache バージョン 1.3.x でのみ可能です。この節では、DSO と静的リンク モジュールを区別して説明を行います。
動的共有オブジェクトとしてのインストール
Apache HTTP サーバ プラグイを動的共有オブジェクトとしてインストールするには、次の操作を行います。
Apache プラグインは、Solaris、Linux、HPUX11 の各プラットフォーム上で使用する共有オブジェクト(.so
)として提供されます。各共有オブジェクト ファイルは、プラットフォーム、クライアントと Apache の間での SSL の使用と不使用、および SSL 暗号化の強度(通常または 128 ビット)に応じて別々のバージョンとして配布されます。128 ビット バージョンは、128 ビット バージョンの WebLogic Server をインストールする場合のみインストールされます。共有オブジェクト ファイルは、WebLogic Server の以下のディレクトリに配置されています。
次の表を基準に適切な共有オブジェクトを選択してください。
Apache HTTP Server プラグインは、Apache 動的共有オブジェクト(DSO)としてインストールされます。Apache の DSO サポートは、mod_so.c
というモジュールを基にしています。このモジュールは、mod_wl.so
がロードされる前に有効になっている必要があります。提供されるスクリプトを使用して Apache をインストールした場合、mod_so.c
はすでに有効になっているはずです。mod_so.c
が有効であることを確認するには、次のコマンドを実行します。
APACHE_HOME
\bin\httpd -l
APACHE_HOME
は、Apache HTTP サーバをインストールしたディレクトリです。
このコマンドを実行すると、すべての有効なモジュールのリストが表示されます。mod_so.c
がリストにない場合は、ソース コードから Apache HTTP サーバを構築して、以下のオプションがコンフィグレーションされているようにします。
...
--enable-module=so
--enable-rule=SHARED_CORE
...
apxs
(APache eXtenSion) というサポート プログラムを使って、Apache HTTP Server プラグインを Apache 1.x サーバにインストールし、次の行を httpd.conf
ファイルに追加します。
AddModule mod_so.c
Apache 2.x の場合は、apxs
を実行するのではなく、mod_wl_20.so
ファイルを APACHE_HOME
¥modules
ディレクトリにコピーします。詳細については、Apache HTTP Server Version 2.0 のマニュアルを参照してください。
weblogic_module
をアクティブにします。Perl がインストールされていないと、この Perl スクリプトは実行できません。
perl
APACHE_HOME\bin\apxs -i -a -n weblogic mod_wl.so
このコマンドでは、mod_wl.so
ファイルが APACHE_HOME
\libexec
ディレクトリにコピーされます。また、httpd.conf
ファイルに weblogic_module
に関する指示が 2 行追加され、このモジュールがアクティブになります。Apache 1.x サーバのインストール環境にある APACHE_HOME
\conf
\httpd.conf
ファイルに以下の行が追加されたことを確認します。
LoadModule weblogic_module libexec/mod_wl.so
AddModule mod_weblogic.c
Apache 2.x の場合は、次の行を APACHE_HOME
/conf/httpd.conf ファイルに手作業で追加します。
LoadModule weblogic_module modules/mod_wl_20.so
httpd.conf
コンフィグレーション ファイルに追加パラメータをコンフィグレーションします。httpd.conf
ファイルでは、Apache HTTP Server プラグインの動作をカスタマイズできます。
APACHE_HOME
\conf
\httpd.conf
ファイルの構文を検証します。
Apache 1.x の場合: APACHE_HOME¥bin¥apachect1 configtest
Apache 2.x の場合: APACHE_HOME¥bin¥Apache -t
このコマンドの出力は、httpd.conf
ファイルのエラーを示します。
/weblogic/
」を設定して Apache プラグインをテストします。この設定では、WebLogic Server でデフォルト Web アプリケーションとして定義されている、デフォルトの WebLogic Server HTML ページ、ウェルカム ファイル、またはデフォルト サーブレットが開くはずです。次に例を示します。
http://myApacheserver.com/weblogic/
静的リンク モジュールとしてのインストール
Apache HTTP サーバ プラグインを静的リンク モジュールとしてインストールするには、次の操作を行います。
各ライブラリ ファイルは、プラットフォームおよび SSL 暗号化の強度(通常または 128 ビット)に応じて別々のバージョンとして配布されます。128 ビット バージョンは、128 ビット バージョンの WebLogic Server をインストールする場合のみインストールされます。ライブラリ ファイルは、WebLogic Server の以下のディレクトリに配置されています。
lib/hpux11
次の表を基準に適切な共有オブジェクトを選択してください。
Apache のバージョン |
通常強度の暗号化 |
128 ビットの暗号化 |
---|---|---|
標準の Apache バージョン 1.3.x |
|
|
tar -xvf apache_1.3.x.tar
src/modules
ディレクトリに移動します。
weblogic
という名前のディレクトリを作成します。
Makefile.libdir、Makefile.tmpl
を WebLogic Server インストール ディレクトリの lib
ディレクトリから src/modules/weblogic
にコピーします。
libweblogic.a
(128 ビットのセキュリティを使用する場合は libweblogic128.a
)をリンク ライブラリ ファイルの格納されている同じディレクトリ(
手順 1. を参照)から src/modules/weblogic
にコピーします。
configure --activate-module=src/modules/weblogic/libweblogic.a
configure--activate-module=
src/modules/weblogic/libweblogic128.a
make
make install
Apache HTTP Server プラグインのコンフィグレーション
プラグインをインストールした後は(
Apache HTTP Server プラグインのインストールを参照)、httpd.conf
ファイルを編集して Apache プラグインをコンフィグレーションします。httpd.conf
ファイルを編集して、プラグイン用のネイティブ ライブラリを Apache モジュールとしてロードしなければならないことを Apache Web サーバに通知し、どの要求をそのモジュールで処理しなければならないかを記述します。
httpd.conf ファイルの編集
httpd.conf
ファイルを編集して Apache HTTP Server プラグイン をコンフィグレーションするには、次の操作を行います。
httpd.conf
ファイルを開きます。このファイルは、APACHE_HOME
\conf
\ に配置されています。APACHE_HOME
は、Apache をインストールしたルート ディレクトリです。
apxs
ユーティリティを実行したときに以下の 2 行が httpd.conf
ファイルに追加されたことを確認します。
LoadModule weblogic_module libexec/mod_wl.so
AddModule mod_weblogic.c
IfModule
ブロックを追加します。
クラスタ化されていない WebLogic Server の場合
WebLogicHost および WebLogicPort パラメータ
WebLogic Server のクラスタの場合
WebLogicCluster パラメータ
次に例を示します。
<IfModule mod_weblogic.c>
WebLogicHost myweblogic.server.com
WebLogicPort 7001
</IfModule>
MatchExpression
行も IfModule
ブロックに追加します。パスを基準にリクエストをプロキシすることもできます。パスを基準としたプロキシは、MIME タイプを基準としたプロキシに優先します。パスのみを基準にリクエストをプロキシしたい場合は、
手順 5.に進んでください。
たとえば、クラスタ化されていない WebLogic Server 用の次の IfModule
ブロックでは、MIME タイプが .jsp
のすべてのファイルがプロキシされます。
<IfModule mod_weblogic.c>
WebLogicHost myweblogic.server.com
WebLogicPort 7001
MatchExpression *.jsp
</IfModule>
複数の MatchExpressions
を使用することもできます。次に例を示します。
<IfModule mod_weblogic.c>
WebLogicHost myweblogic.server.com
WebLogicPort 7001MatchExpression *.jsp
MatchExpression *.xyz
</IfModule>
MIME タイプを基準にして WebLogic Server のクラスタにリクエストをプロキシする場合は、WebLogicHost
と WebLogicPort
パラメータの代わりに
WebLogicCluster
パラメータを使用します。次に例を示します。
<IfModule mod_weblogic.c>
WebLogicCluster w1s1.com:7001,w1s2.com:7001,w1s3.com:7001MatchExpression *.jsp
MatchExpression *.xyz
</IfModule>
Location
ブロックと SetHandler
文を使用します。SetHandler
は、Apache HTTP Server プラグイン モジュールのハンドラを指定します。たとえば、次の Location
ブロックでは、URL に /weblogic
が含まれているすべてのリクエストがプロキシされます。
<Location /weblogic>
SetHandler weblogic-handler
</Location>
リクエストをパス別に複数のクラスタにプロキシする場合には、Location
ブロックおよび SetHandler 文を複数使用することができます。
以下に例を示します。
<Location /x>
SetHandler weblogic-handler
WebLogicCluster cluster1
</Location>
<Location /y>
SetHandler weblogic-handler
WebLogicCluster cluster2
</Location>
<Location /z>
SetHandler weblogic-handler
WebLogicCluster cluster3
</Location>
また、パス別に複数のクラスタにプロキシするには、以下のような方法もあります。
MatchExpression /x
WebLogicCluster=server1:port,server2:port,server3:port,server4:port|PathTrim=/x
MatchExpression /y
WebLogicCluster=server1:port,server2:port,server3:port,server4:port|PathTrim=/y
MatchExpression /z
WebLogicCluster=server1:port,server2:port,server3:port,server4:port|PathTrim=/z
ここで使用されている一般的な構文は、次のとおりです。
MatchExpression exp name=value|name=value
ただし、exp=Mime タイプ(*.jsp) または exp=/x(パス)
また、リスト内の 2 番目の引数は、WebLogicHost、WebLogicPort、WebLogicCluster、PathTrim、PathPrepend などの名前=値の組をパイプ (|) で区切って並べたリストです。
Apache HTTP Server プラグインは、 Web サーバ プラグインの一般的なパラメータで示されているパラメータを認識します。Apache HTTP Server プラグインの動作を修正するには、以下のいずれかでパラメータを定義します。
httpd.conf ファイルの編集に関する注意事項
IfModule
ブロックにインクルードされる weblogic.conf
という独立したファイルでパラメータを定義できます。このインクルード ファイルを使用すると、コンフィグレーションをモジュール化できます。次に例を示します。
<IfModule mod_weblogic.c>
# パラメータを定義する WebLogic 用コンフィグレーション ファイル
Include conf/weblogic.conf
</IfModule>
注意: インクルード ファイルでのパラメータの定義は、Apache HTTP Server プラグインと WebLogic Server の間で SSL を使用する場合はサポートされません。
PARAM_1 value1
PARAM_2 value2
PARAM_3 value3
IfModule
ブロックの MatchExpression
で指定された MIME タイプと Location
ブロックで指定されたパスの両方に一致する場合は、Location
ブロックで指定された動作が優先されます。
IfModule
ブロックで定義する必要があります。
Apache プラグインでの SSL の使用
セキュア ソケット レイヤ(SSL)プロトコルを使用すると、Apache HTTP Server プラグインと WebLogic Server の間の接続を保護できます。SSL プロトコルは、Apache HTTP Server プラグインと WebLogic Server の間でやり取りされるデータに機密性と整合性を提供します。また、SSL プロトコルを使用すると、プラグインでは、信頼性のあるプリンシパルに情報が渡されることを確認するために、WebLogic Server に対して自身を認証することができます。
Apache HTTP Server プラグインでは、Apache HTTP Server プラグインと WebLogic Server の接続を保護するために SSL プロトコルが使用されるのかどうかを、(通常はブラウザからの)HTTP リクエストで指定された転送プロトコル(http
または https
)では判断しません。
注意: Apache HTTP Server と WebLogic Server の間には相互 SSL をコンフィグレーションできません。SSL プロトコルは、ポイント ツー ポイントの接続であり、暗号化されたエンド ツー エンドのプロトコルです。したがって、どのようなタイプのプロキシまたはファイアウォールも、SSL ソケットの内容を見ることはできません。Apache HTTP Server は、SSL 接続におけるサーバ エンドポイントとして機能します。コンフィグレーションは次のようになります。
クライアント
-->
相互
SSL
-->
Apache
<--
一方向
SSL
<--
WebLogic Server
Apache HTTP Server は、クライアントのプライベート キーを使用できないので、1 番目の SSL 接続からのデジタル証明書を 2 番目の SSL 接続で使用することはできません。
Apache HTTP Server プラグインと WebLogic Server の間の SSL のコンフィグレーション
Apache HTTP Server プラグインと WebLogic Server の間で SSL プロトコルを使用するには、次の操作を行います。
httpd.conf
ファイルの WebLogicPort
パラメータを
手順 2. でコンフィグレーションしたリスン ポートに設定します。
httpd.conf
ファイルの SecureProxy
パラメータを ON
に設定します。
httpd.conf
ファイルで設定します。パラメータのリストについては、
Web サーバ プラグインの SSL パラメータを参照してください。
SSL を使用するように Apache プラグインをコンフィグレーションする際には、以下の 2 つの点に注意してください。
<Location>
タグの内側でコンフィグレーションしなければなりません。
次のコンフィグレーションは正しくありません。
<Location /weblogic>
SetHandler weblogic-handler
</Location>
<IfModule mod_weblogic.c>
WebLogicHost localhost
WebLogicPort 7001
PathTrim /weblogic
</IfModule>
次のコンフィグレーションは正しい設定です。
<Location /weblogic>
SetHandler weblogic-handler
PathTrim /weblogic
</Location>
Include
ディレクティブが機能しません。パラメータはすべて、httpd.conf
ファイルの中で直接コンフィグレーションする必要があります。SSL を使用する際には次のコンフィグレーションは使用しないでください。
<IfModule mod_weblogic.c>
MatchExpression *.jsp
Include weblogic.conf
</IfModule>
接続エラーとクラスタのフェイルオーバ
WebLogic Server に接続するときに、Apache HTTP Server プラグインは複数のコンフィグレーション パラメータを使用して WebLogic Server ホストへの接続の待ち時間と、接続確立後の応答の待ち時間を判断します。接続できないか、応答がない場合、このプラグインはクラスタ内の別の WebLogic Server に接続してリクエストを送信しようとします。接続が失敗するか、クラスタ内のどの WebLogic Server からも応答がない場合は、エラー メッセージが送信されます。
図 11-1は、プラグインがどのようにフェイルオーバを処理するのかを示しています。
接続の失敗
接続要求にホストが応答できない場合は、ホスト マシンの問題やネットワークの問題など、サーバに障害があることが考えられます。
WebLogic Server が応答できない場合は、WebLogic Server が動作していないことや、サーバのハング、データベースの問題など、アプリケーションに障害があることが考えられます。
クラスタ化されていない単一 WebLogic Server でのフェイルオーバ
WebLogic Server が 1 つしか動作していない場合でも、ここで説明する同じ理論が適用されますが、プラグインは
WebLogicHost パラメータで定義されたサーバにのみ接続しようとします。その試みが失敗すると、HTTP 503
エラー メッセージが返されます。プラグインは、
ConnectTimeoutSecs に達するまで WebLogic Server への接続を繰り返し試みます。
動的サーバ リスト
WebLogicCluster
パラメータで WebLogic Server のリストを指定すると、プラグインではクラスタ メンバー間でのロード バランシングの起点としてそのリストが使用されます。最初のリクエストがそれらのサーバの 1 つに転送された後に、クラスタ内のサーバの更新されたリストを格納する動的サーバ リストが返されます。更新されたリストはクラスタ内の新しいサーバを追加し、すでにクラスタから外れているか、リクエストに応答できなかったサーバを削除します。このリストは、クラスタで変更が行われたときに HTTP 応答によって自動的に更新されます。
テストの必要な新しいサーバに対してトラフィックが発生しないようにするには、新しく追加するサーバのテストが完全に終わるまで待ってから、サーバをクラスタの対象にします。この時点で、サーバはクラスタのノードになります。このノードは、自動的に、プロキシからのトラフィックの受信を開始します。
フェイルオーバ、クッキー、および HTTP セッション
リクエストがクッキー、POST データ、または URL エンコーディングを通じてセッション情報を格納している場合、そのセッション ID にはセッションが最初に確立された特定のサーバ(プライマリ サーバ)への参照と元のセッションがレプリケートされる追加サーバ(セカンダリ サーバ)への参照が含まれています。クッキーが含まれているリクエストは、プライマリ サーバに接続しようとします。その試行が失敗すると、リクエストはセカンダリ サーバに転送されます。プライマリ サーバとセカンダリ サーバが両方とも失敗すると、セッションが失われて、プラグインは動的クラスタ リストの別のサーバにあらためて接続しようとします。詳細については、 図 11-1( 接続のフェイルオーバ)を参照してください。
注意: POST データが 64K を超える場合、プラグインは、セッション ID を取得するための POST データの解析を行いません。したがって、セッション ID を POST データに格納した場合、プラグインはリクエストを正しいプライマリまたはセカンダリ サーバにルーティングできないので、セッション データが失われる可能性があります。
図11-1 接続のフェイルオーバ
*赤いループで許可される再試行の限度は、次の式で計算されます。ConnectTimeoutSecs
÷
ConnectRetrySecs
この節では、httpd.conf
ファイルのサンプルを紹介します。このサンプルをテンプレートとして使用し、ユーザの環境およびサーバに合うように変更できます。# で始まる行はコメントです。Apache HTTP サーバでは大文字と小文字は区別されません。また、apxs
ユーティリティによって LoadModule
および AddModule
行が自動的に追加されます。
####################################################
APACHE-HOME
\conf\httpd.conf ファイル
####################################################
LoadModule weblogic_module libexec/mod_wl.so
AddModule mod_weblogic.c
<Location /weblogic>
SetHandler weblogic-handler
PathTrim /weblogic
ErrorPage http://myerrorpage1.mydomain.com
</Location>
<Location /servletimages>
SetHandler weblogic-handler
PathTrim /something
ErrorPage http://myerrorpage1.mydomain.com
</Location>
<IfModule mod_weblogic.c>
MatchExpression *.jsp
WebLogicCluster w1s1.com:7001,w1s2.com:7001,w1s3.com:7001
ErrorPage http://myerrorpage.mydomain.com
</IfModule>
httpd.conf
ファイルの location
ブロックでパラメータを定義する代わりに、必要に応じて、httpd.conf
ファイルの IfModule
によってロードされる weblogic.conf
ファイルを使用できます。以下の例テンプレートとして使用して、ユーザの環境およびサーバに合うように変更できます。# で始まる行はコメントです。
# このパラメータは、現在のモジュールに転送される
# すべての URL で共通。URL ごとにパラメータを
# オーバーライドする場合は、<Location> ブロック
# または <Files> ブロックで設定できる(WebLogicHost、
# WebLogicPort、WebLogicCluster、CookieName は除く)。
<IfModule mod_weblogic.c>
WebLogicCluster w1s1.com:7001,w1s2.com:7001,w1s3.com:7001
ErrorPage http://myerrorpage.mydomain.com
MatchExpression *.jsp
</IfModule>
####################################################
# このパラメータは、現在のモジュールに転送される
# すべての URL で共通。URL ごとにパラメータを
# オーバーライドする場合は、<Location> ブロック
# または <Files> ブロックで設定できる(WebLogicHost、
# WebLogicPort、WebLogicCluster、CookieName は除く)。
<IfModule mod_weblogic.c>
MatchExpression *.jsp WebLogicHost=myHost|WebLogicPort=7001|Debug=ON
MatchExpression *.html WebLogicCluster=myHost1:7282,myHost2:7283|ErrorPage=
http://www.xyz.com/error.html
</IfModule>
# このパラメータは、現在のモジュールに転送される
# すべての URL で共通。URL ごとにパラメータを
# オーバーライドする場合は、<Location> ブロック
# または <Files> ブロックで設定できる(WebLogicHost、
# WebLogicPort、WebLogicCluster、CookieName は除く)。
<IfModule mod_weblogic.c>
WebLogicHost myweblogic.server.com
WebLogicPort 7001
MatchExpression *.jsp
</IfModule>
NameVirtualHost 172.17.8.1
<VirtualHost goldengate.domain1.com>
WebLogicCluster tehama1:4736,tehama2:4736,tehama:4736
PathTrim /x1
ConnectTimeoutSecs 30
</VirtualHost>
<VirtualHost goldengate.domain2.com>
WeblogicCluster green1:4736,green2:4736,green3:4736
PathTrim /y1
ConnectTimeoutSecs 20
</VirtualHost>
単一 IP アドレスによる名前ベースの仮想ホスティングのコンフィグレーション例
<VirtualHost 162.99.55.208>
ServerName myserver.mydomain.com
<Location / >
SetHandler weblogic-handler
WebLogicCluster 162.99.55.71:7001,162.99.55.72:7001
Idempotent ON
Debug ON
DebugConfigInfo ON
</Location>
</VirtualHost>
<VirtualHost 162.99.55.208>
ServerName myserver.mydomain.com
<Location / >
SetHandler weblogic-handler
WebLogicHost russell
WebLogicPort 7001
Debug ON
DebugConfigInfo ON
</Location>
</VirtualHost>
![]() |
![]() |
![]() |