Oracle HTTP Server 管理者ガイド
10g(10.1.3.1.0) B31847-01 |
|
この付録では、Oracle Application Server Proxy Plug-in(OracleAS Proxy Plug-in)により、コンポーネントをサード・パーティのHTTPリスナーと併用する方法について説明します。OracleAS Proxy Plug-inは、UNIXおよびWindowsシステムの場合はSun ONE Web Server Enterprise Edition、Windowsシステムの場合はMicrosoft Internet Information Server(IIS)で動作し、Oracle Application Serverにリクエストを送信します。
内容は、次のとおりです。
OracleAS Proxy Plug-inはリバースHTTPプロキシです。図A-1のように、プラグインは受信HTTPリクエストをOracle Application Serverインスタンスに送信します。
このプロキシの仕組みは、サード・パーティのHTTPリスナーによりロードされる共有ライブラリであり、プラグインとして提供されます。このプラグインはサード・パーティのリスナーとともに提供されるAPIを使用して、モジュールがOracle HTTP Serverにプラグインされるのとほぼ同じ方法で、HTTPリクエストを直接処理します。
Oracle HTTP Serverでは、サード・パーティのリスナーで使用されているアドレスとポートを疑似実行できます。つまり、Oracle HTTP Serverにリクエストを送信するときに、リクエストの送信先である実際のホスト名とポートとは異なるHost: HTTPヘッダーを送信するように、プロキシを構成できます。これにより、ダウンストリーム・アプリケーションはリバース・プロキシの導入から保護されます。
OracleAS Proxy Plug-inは、Oracle Application Server 10g Companion CDに含まれています。このCDは、Oracle Application ServerのCDパックに含まれています。
OracleAS Proxy Plug-inをダウンロードした後、適切な構成ファイルと共有ライブラリをサード・パーティのリスナーがアクセスできるディレクトリに格納します。
Oracle Application Server 10g Companion CDでは、ファイルは、UNIXの場合は/plugins/solaris/
、Windowsの場合は¥plugins¥win32¥
にあります。
表A-1に、OracleAS Proxy Plug-inの共有ライブラリに関する情報を示します。
Oracle Application Serverをインストールすると、Application Server Controlコンソールを使用してOracle HTTP Serverを管理できます。ただし、Oracle HTTP ServerのかわりにSun ONEまたはIISの使用を選択した場合は、Application Server Controlコンソール上でOracle HTTP Serverを表示しないように無効にすることをお薦めします。
Application Server Controlコンソールを使用したOracle HTTP Server以外のリスナーの監視または管理は、Oracleではサポートされません。
OracleAS Proxy Plug-inの構成ファイルは1つで、このファイルによりプロキシ機能が制御されます。Webサーバーのファイル・システムに構成ファイルが存在する場合は、その機能が有効になります。
また、サード・パーティのリスナーに対してプラグインを有効にするには、そのリスナー固有の構成ファイルを変更する必要があります。
プロキシ・サーバー定義ファイルは、サード・パーティのリスナーが読取り可能なディレクトリに置く必要があります。システム上の便利な場所にproxy
というディレクトリを作成し、プロキシ・サーバー定義ファイル、プロキシ共有ライブラリ・ファイルおよびプロキシ・ログ・ファイルを配置すると、簡素化できます。
プロキシ・サーバー定義ファイルの内容は次のとおりです。詳細は、プロキシ構成ファイルのパラメータを参照してください。
このファイルは、好みのテキスト・エディタで作成できます。oproxy.serverlistパラメータには、サーバー名を少なくとも1つ指定する必要があります。指定しないと、プロキシは動作しません。
例A-1は、サンプルのプロキシ・サーバー定義ファイルです。
# This file defines proxy server behavior. # # Server names that the proxy plug-in will recognize. oproxy.serverlist=ias1 # Hostname to use when communicating with a specific server. oproxy.ias1.hostname=oasdocs.us.oracle.com # Port to use when communicating with a specific server. oproxy.ias1.port=7777 # Description of URL(s) that will be redirected to this server. oproxy.ias1.urlrule=/*
この項では、次のプロキシ構成ファイルのパラメータについて説明します。
プラグインで認識されるサーバー名をすべてリストします。
特定のサーバーとの通信時に使用するホスト名を定義します。
カテゴリ | 値 |
---|---|
パラメータ・タイプ |
文字列 |
使用可能な値 |
有効なホスト名 |
デフォルト値 |
なし |
例 |
|
特定のサーバーとの通信時に使用するポートを定義します。
カテゴリ | 値 |
---|---|
使用可能な値 |
有効なポート値 |
デフォルト値 |
80 |
例 |
|
クライアントからサード・パーティのHTTPリスナーへのアクセスに使用するホスト名とポートを定義して、プロキシの疑似実行機能をサポートします。このパラメータを定義すると、この値がHost: HTTPヘッダーとして渡されます。定義しない場合は、実際に通信先となるマシンのホスト名とポートが送信されます。
カテゴリ | 値 |
---|---|
パラメータ・タイプ |
文字列 |
使用可能な値 |
host:port |
デフォルト値 |
|
例 |
|
ホスト名を解決するために、すべてのリクエストについてプロキシ・プラグインをバックエンド・サーバーに送ります。これにより、プロキシ・プラグインとバックエンド・サーバー間のDNSベースのフェイルオーバーまたはルーティングが可能になります。このパラメータを使用すると、すべての受信リクエストについてDNSサーバーへの送信のコストが発生するため、ホスト名からIPアドレスへのマッピングが動的に変わる場合のみ使用してください。
カテゴリ | 値 |
---|---|
使用可能な値 |
trueまたはfalse |
デフォルト値 |
false |
例 |
|
このサーバーにリダイレクトされるURLまたはURLセットを記述します。指定したサーバーには、任意の数のurlrule
プロパティを割り当てることができます。
カテゴリ | 値 |
---|---|
パラメータ・タイプ |
文字列 |
例 |
|
完全一致、コンテキスト一致または拡張子一致という3種類のルールを使用できます。
例:
oproxy.ias1.urlrule=/foo/bar/foo.html
では、プロキシされるURL /foo/bar/foo.html
のみがサーバーias1
にマップされます(サーバーias1
の詳細は、サーバーの構成ファイル内で構成されます)。
oproxy.ias1.urlrule=/foo/*
では、/foo
で始まるURLがサーバーias1
にマップされます。 コンテキスト一致の場合は、stripcontextオプションとurlrule
パラメータを使用して、ワイルドカードの後のurl部分のみをサーバーに送信できます。stripcontextオプションのデフォルトはfalseで、trueに設定しないかぎり指定する必要はありません。次の例では、わかりやすくするためにfalseを指定しています。
例: 次の構成の場合について考えます。
oproxy.ias1.urlrule=/ias1/* oproxy.ias1.stripcontext=false
次のURLリクエストがあるとします。
http://hostname/ias1/header1.gif
このリクエストで、次のファイルが取得されます。
ORACLE_HOME/Apache/Apache/htdocs/ias1/header1.gif
次の構成の場合について考えます。
oproxy.ias1.urlrule=/ias1/* oproxy.ias1.stripcontext=true
次のURLリクエストがあるとします。
http://hostname/ias1/header1.gif
このリクエストで、次のファイルが取得されます。
ORACLE_HOME/Apache/Apache/htdocs/header1.gif
たとえば、oproxy.ias1.urlrule=/*.jsp
では、末尾が.jsp
のURLがすべてサーバーias1
にマップされます。これをコンテキスト・ルールと組み合せて/foo/bar/*.jsp
のように指定できます。この場合、/foo/bar
で始まって.jsp
で終わるURLのみがプロキシされます。
プロキシ・サーバー定義ファイル内で、プラグインにプロキシするサーバーとURLを定義します。
oproxy.serverlist=ias1,ias2
oproxy.ias1.hostname=myhost.us.oracle.com oproxy.ias1.port=7777 oproxy.ias1.alias=www.oracle.com
ホスト名は必須です。ポートを指定しないと、80が割り当てられます。別名の値を指定しないと、指定したホスト名とポートの組合せが使用されます。別名により、バックエンド・サーバーは、クライアントからサード・パーティのリスナーに配信されるHTTPのHost: ヘッダーと完全一致のヘッダーを持つリクエストを受信できます。
urlrule
パラメータを設定して、サーバー間のリダイレクションを指定します。たとえば、次のルールがあるとします。
oproxy.ias1.urlrule=/*
このルールでは、プロキシされるすべての受信リクエストがサーバーias1
のWebサーバーにマップされます。これらのルールは、URLの完全一致、コンテキスト一致または拡張子ベースという3つの形式で指定できます。完全一致の場合は、次のように1つのURLが1つのサーバーに厳密にマップされます。
oproxy.ias1.urlrule=/my/path/index.html
この例では、/my/path/index.html
へのアクセスのみがプロキシ用にマップされます。次にコンテキスト・ルールの例を示します。
oproxy.ias1.urlrule=/app1/*
この例では、/app1
で始まるURLがすべてマップされます。次のような拡張子ベースのルールがあるとします。
oproxy.ias1.urlrule=/*.jsp
この例では、末尾が.jsp
のURLがすべてマップされます。
マップされたURLに送信されるすべてのリクエストは、HTTP/1.1経由で指定のサーバーにプロキシされます。
この項では、UNIXおよびWindowsシステム上のSun ONE Enterprise Serverリスナーに関するプロキシ・プラグインの構成手順について説明します。
/config
ディレクトリで、magnus.conf
ファイル(バージョン6)またはobj.conf
(バージョン4)を開きます。
UNIXの場合:
Init fn="load-modules" shlib="/path/oracle_proxy.so" funcs=op_init,op_objecttype,op_service
Windowsの場合:
Init fn="load-modules" shlib="/path/oracle_proxy_sunone.dll" funcs=op_init,op_objecttype,op_service
/path/
は、プラグインの共有ライブラリへのパスです。この行では、リスナーに対してプロキシ共有ライブラリの格納場所と、このライブラリで公開されているファンクションが示されています。
Init fn="op_init" server_defs="/path/servers" log_file="/path/oproxy.log" log_level=error
/path/
は、プロキシ・サーバー定義ファイルとログ・ファイルへのパスです。プロキシ・サーバー定義ファイルには、プロキシ・プラグインで通信可能なサーバーに関するすべての構成情報が含まれています。プラグインからのメッセージを記録するためのログ・ファイルとログ・レベルも指定できます(オプション)。
obj.conf
ファイルの<Object name=default>
セクションで、ObjectType
で始まる他のすべての行の前に次の行を追加します。
ObjectType fn=op_objecttype
Service
で始まる他のすべての行の前に、次の行を追加します。
Service type="oracle/proxy" fn="op_service"
この項では、Windowsシステム上のIISリスナーに関するプロキシ・プラグインの構成手順について説明します。この処理には、Windowsレジストリ・エントリの作成とIIS管理コンソールを使用したディレクトリおよびフィルタの追加が必要です。プラグインの構成後にリスナーを再起動する必要があります。
プラグインを構成するには、次の手順を実行します。
regedit
と入力し、「OK」をクリックします。 「レジストリ エディタ」ウィンドウが表示されます。
HKEY_LOCAL_MACHINE
フォルダを開きます(名前の前の「+」をクリックします)。
SOFTWARE
フォルダを開きます(名前の前の「+」をクリックします)。
ORACLE
フォルダをクリックします。
ORACLE
フォルダの下に新規キー #1
という名前の新規フォルダが追加されます。
IIS
Proxy
Adapter
を入力します。
右側のウィンドウに新規値 #1
という名前の新しい値が追加されます。
server_defs
を入力します。
log_file
とlog_level
を指定します。この手順はオプションです。
oracle_proxy.dll
と同じ物理パスを指定して、IIS Webサイトに新規の仮想ディレクトリを追加します。ディレクトリ名としてoproxy
を指定し、実行アクセス権限を付与します。
oracle_proxy.dll
を追加します。フィルタ名はoproxy
とし、その実行可能ファイルはoracle_proxy.dll
を含むディレクトリ(d:¥proxy¥oracle_proxy.dll
など)を指す必要があります。
oproxy
フィルタが緑の上矢印でマークされていることを確認します。 この項では、OracleAS Proxy Plug-inの背後で動作するアプリケーションの開発時に注意が必要な開発および使用方法について重点的に説明します。また、その一部は、Oracle Application Server Web Cacheの背後で動作するアプリケーションを使用可能にする場合にも関係があります。
通常、これが関係するのは、アプリケーションにOracle HTTP Serverへ直接プラグインするモジュールがある場合のみです。具体的には、Oracle HTTP Serverへの接続に基づいて、認証にSSL証明書を使用しているなど、クライアント情報の取得に伴う依存性を調べます。現在、SSLはサポートされていないため、クライアントがSSLを使用してサード・パーティのリスナーに接続しても、そのリスナーからは暗号化されていないHTTPメッセージがOracle HTTP Serverに送信されます。これは、プラグインの背後にあるコンポーネントにはクライアント証明書を使用できないことを意味します。OracleAS Proxy Plug-inとOracle Application Server Web Cacheが使用されている場合、環境変数REMOTE_ADDR
は明確に保持されていますが、他のクライアント情報は、実際には、クライアントの実際のホスト・マシンではなく、プロキシが常駐するマシンを示していることがあります。Oracle HTTP ServerがOracle Application Server用の外部リスナーでない場合は、このような動作を見つけて排除する必要があります。
これには、静的HTMLページや、サーブレット、JSP、PL/SQLなどにより生成される動的ページが含まれます。Oracle HTTP Serverのサーバー名を取得するコードをすべて検査し、クライアントに返されるページにサーバー名が埋め込まれていないことを確認します。この動作をテストするには、Webサイト上のすべてのリンクを走査するスパイダ・アプリケーションを使用します。この機能を持つオープン・ソースのツールを使用できます。
ブラウザベースのコードを使用するアプリケーションがある場合は、そのコードに実際にコンテンツを配信するOracle HTTP Serverのホスト名とポートが含まれていないことを確認します。かわりに、サード・パーティのリスナーが使用する、実際にクライアントがアクセス可能なアドレスを含める必要があります。
アプリケーションに対するすべてのリクエストを適切にプロキシするには、OracleAS Proxy Plug-inにそのアプリケーションのURL領域に関する詳細な記述が必要です。Oracle Application Serverの各アプリケーションでは、そのアプリケーション用にプラグインを構成するために必要なルール・セットを記述する必要があります。このルール・セットには、アプリケーションで生成できるURLをすべて含めてください。プロキシのurlrule
パラメータで記述されないURLがアプリケーションにより生成されると、リクエストはサード・パーティのHTTPリスナーにより処理され、「document not found」というエラーが発生することがあります(また、さらに悪いことに、意図したものとは異なるドキュメントがクライアントに配信されることがあります)。
共通のトップレベル・ディレクトリ(マッピングやイメージに依存するディレクトリ)を使用するアプリケーションの開発者は、次のように準備する必要があります。
この項では、一般的な問題と考えられる解決策について説明します。
magnus.conf
ファイルにInit
行が追加され、obj.conf
ファイルにObjectType
およびService
行が追加されていることを確認します。
urlrule
パラメータが適切に設定されていることを確認し、stripcontextオプションをtrueに設定する必要があるかどうかを検討します。
serverlist
行で、アクセス先となるバックエンド・サーバーが指定されていることを確認します。
urlrule
パラメータで、バックエンド・サーバー上の適切な領域がターゲットとして指定されていることを確認します。
Sun ONEブラウザでIISページを表示しないでください。
ポートを変更したりセキュリティを有効にしたりすると(SSLの場合)、サーバーからエラー・メッセージ「Unable to parse magnus.conf
」が返されることがあります。
magnus.conf
ファイル内で、コメントとInit
行の前後に追加した行を削除します。
存在することがわかっているファイルをコンテキストベースのurlrule
パラメータを使用して取得するときに、リスナーから「Not Found
」というメッセージが返される場合は、stripcontext=true
を設定する必要があります。
IISおよびSun ONEサーバーでは、URLの自動完了方式が異なります。http://serviceman
、http://serviceman/
およびhttp://serviceman/index.html
のリクエストでは、どのプラットフォームでも同じ結果が返されるとはかぎりません。oproxy.
servername
.urlrule
パラメータを使用すると、この問題を回避できます。
デフォルトのSun ONE構成では、/servletに対するすべてのURLリクエストが、固有のサーブレット・ハンドラにマップされます。この問題を解決するには、プロキシ・サーバー定義ファイルを編集するか、Sun ONE構成を変更する必要があります。
プロキシ・サーバー定義ファイル内(または同様の使用例)で正確なurlrule
パラメータ(たとえばurlrule=/*.html
)を使用している場合、サーバーは指定したページを取得しますが、他のリンクはページ内のインライン・イメージを含めてすべてユーザーに対して禁止されます。(stripcontext=true
を指定して正確なurlrule
を使用すると、Server Errorが返されます。)
クライアント・ブラウザのメモリー・キャッシュを消去します。旧バージョンのSun ONEとIEでは、ページを毎回取得するように指定した場合でも、キャッシュ用のメモリーが割り当てられていない場合でも、ページがキャッシュされます(この動作を機能させるには、ブラウザを再起動する必要があります)。予期しないページが表示される場合は、ページをリフレッシュするか、再ロードしてください。
通常、REMOTE_ADDR
フィールドには、クライアント・マシンのIPアドレスが含まれます。一部のURLリクエストの場合は、環境内にプロキシ・サーバーがあると、このフィールドにプロキシ・サーバーのIPアドレスが含まれることがあります。
バックエンド・サーバーがネットワークのエントリ・ポイントへのリダイレクトを返す場合は、次のどちらかを実行してください。最初の方法を実行することをお薦めします。
httpd.conf
ファイルに次のディレクティブを設定します。
UseCanonicalName On ServerName name of listener host Port port of listener host
httpd.conf
ファイルに次のディレクティブを設定します。
UseCanonicalName port Port port of listener host
プロキシ・プラグインのサーバー構成ファイルを次のように編集します。
oproxy.serverName.alias=name of listener host:port of listener host
プロキシ・プラグインでは、クライアントとプロキシ・ホスト間のSSL接続がサポートされますが、プロキシとバックエンド・サーバー間のSSL接続はサポートされません。後者を実装するには、SSL接続を受信してバックエンド・サーバーを非SSLモードで起動するように、リスナーを設定します。プロキシ構成を変更する必要はありません。
|
![]() Copyright © 2006 Oracle Corporation. All Rights Reserved. |
|