Oracle HTTP Server スタンドアロン・デプロイの管理Apache 2.0ベース 10g(10.1.3.1.0) B31848-02 |
|
この章では、Oracle HTTP Serverに組み込まれているモジュール(mod)について説明します。モジュールはWebサーバーの基本機能を拡張し、Oracle HTTP Serverとその他のOracle Application Serverコンポーネントとの統合をサポートします。
表6-1に、この章で説明するOracle HTTP Serverの全モジュールを示します。
Oracle HTTP Serverのモジュール |
|||
---|---|---|---|
|
|
ホスト名やIPアドレスなど、リクエストの特性に基づいてサーバーへのアクセスが制御されます。
ファイル・タイプやリクエスト方法に基づいてCGIスクリプトを実行できます。
リクエストの処理中にURLを操作できます。このモジュールには、URLとファイル・システムのパスとのマッピングおよびURLリダイレクション機能があります。
固有のHTTPヘッダーを含むファイルを送信できます。
ファイルベースのユーザー・リストによるユーザー認証ができます。
保護付き領域への匿名ユーザー・アクセスができます(電子メール・アドレスをロギングできる匿名FTPと同様です)。
DBMファイルを使用してユーザー認証を提供します。
ディレクトリ索引が自動的に生成されます。
CERN(Conseil Europeen pour le Recherche Nucleaire) HTTPDメタファイルのセマンティクスがエミュレートされます。メタファイルは、サーバーがアクセスするファイルごとに通常のセットに加えて生成できるHTTPヘッダーです。
Oracle HTTP Serverの前でSSL接続が終了するリバース・プロキシが、SSLクライアント証明書情報などのSSL接続に関する情報を、Oracle HTTP ServerおよびOracle HTTP Serverの背後で動作しているアプリケーションに送信できるようにします。この情報は、HTTPヘッダーを使用してリバース・プロキシからOracle HTTP Serverに送信されます。情報はヘッダーから標準CGI環境変数に送信されます。SSL接続がOracle HTTP Serverによって終了する場合はmod_ossl
またはmod_ssl
がこの環境変数を移入します。これはOracleモジュールです。
また、特定のリクエストがHTTP経由で受信される場合も、HTTPSリクエストとして扱うことができます。これは、SimulateHttps
ディレクティブを使用して実行されます。
SimulateHttps
は、それ自体が含まれるコンテナ(<VirtualHost>、<Location>など)を使用し、受信されたこのコンテナに対するすべてのリクエストを、リクエストの受信に使用された実際のプロトコルに関係なく、HTTPS経由で受信されたものとして扱います。
サーバーでCGIスクリプトを実行できます。
最適化が施されていることと、追加のScriptSock
ディレクティブを除けば、このモジュールはmod_cgiと同様に機能します。ScriptSock
ディレクティブは、CGIデーモンとの通信に使用されるソケットの名前を設定します。ソケットは、Apacheを起動するユーザー(通常はroot)の権限を使用してオープンされます。
サーバーでスラッシュ(/)のリダイレクトを実行できます。ディレクトリ指定には後続のスラッシュを含める必要があります。後続のスラッシュがないURLリクエストを受信すると、mod_dir
は後続のスラッシュが付いている同一のURLにリダイレクトします。次に例を示します。
http://myserver/documents/mydirectory
このURLは、次のURLにリダイレクトされます。
http://myserver/documents/mydirectory/
環境変数を渡し、設定および設定解除することで、CGIスクリプトとサーバー・サイド・インクルード(SSI: Server Side Includes)ページの環境を制御できます。
ModifyEnv
は、値を既存のENV
変数の値の前または後ろに付加し、Oracle HTTP Server環境に渡します。次に使用方法を示します。
$FOO
= "foo"
の場合:
ModifyEnv FOO "bar" modifies the value of $FOO from "foo" to "foo:bar" ModifyEnv FOO "+bar" modifies the value of $FOO from "foo" to "bar:foo"
$FOO
が定義されていない場合:
Modify Foo "bar" sets the value of $FOO to "bar"
サーバーでExpires HTTPヘッダーを生成できます。このヘッダーは、ドキュメントの妥当性に関する情報をクライアントに提供します。期限切れ条件に基づいて、キャッシュされたコピーが期限切れになると、ドキュメントが情報源より再取得されます。
FastCGIプロトコルをサポートします。このプロトコルにより、CGIアプリケーション用に実行中のサーバーのプールをメンテナンスできます。その結果、起動と初期化のオーバーヘッドがなくなります。
頻繁にリクエストされる静的ファイルのキャッシュ方法を提供します。破損したサイトが作成されやすいため、このモジュールは慎重に使用してください。
HTTPレスポンス・ヘッダーをマージ、置換または削除できます。
サーバー側のイメージ・マップ処理ができます。
SSI(サーバー・サイド・インクルード)ディレクティブ用のドキュメントを処理するフィルタを提供します。
すべてのインストール済モジュールとディレクティブの設定など、サーバー構成全体のサマリーが生成されます。
サーバー・アクティビティの、構成およびカスタマイズ可能なロギング機能が提供されます。ログの書式を選択し、ロギング対象となる個々のリクエストをその特性に基づいて選択または除外できます。
各リクエストに対して送受信された入出力バイト数のロギング機能を提供します。記録される数値はネットワーク上で実際に受信されたバイト数を反映したもので、リクエストとレスポンスのヘッダーとボディから算出されます。
サーバーでファイル名からファイル・タイプを判断し、処理用のハンドラに関連付けできます。
サーバーでは、ファイルの内容のうち数バイトを検査することでファイルのMIMEタイプを判断できます。mod_mimeでファイル・タイプを判断できない場合にこのモジュールを使用します。最初にmod_mime
によってファイルが処理されるように、mod_mime
が構成ファイル内でmod_mime_magic
より前にあることを確認してください。
サーバーによるコンテンツのネゴシエーション(クライアントの機能に基づくドキュメントの選択)が有効化されます。
AJP 1.3プロトコルを介して、Oracle HTTP ServerからOracle Containers for J2EE(OC4J)にリクエストがルーティングされます。これはOracleモジュールであり、デフォルトで使用可能です。
各OC4Jにはopmn.xmlからルーティングIDが割り当てられます。Oracle Process Manager and Notification Server(OPMN)により、ルーティングIDを含む通知が各OC4Jに対して送信されます。ルーティングIDの受信時に、mod_OC4JはOC4JのルーティングIDとOHSのルーティングIDを比較し、ルーティングIDに対応するOC4Jをルーティング表に動的に追加します。
インストール後、OHSはデフォルトでopmn.xml
のルーティングIDを使用するよう構成されます。デフォルトのルーティングIDはg_rt_id
です。すべてのOC4Jに同一のデフォルト・ルーティングIDが設定されるため、OHSは新規にインストールされたias-instance
の全OC4Jをルーティングします。クラスタに複数のias-instance
が含まれる場合、OHSはデフォルト・ルーティングIDを持つ全OC4Jをルーティングします。
次に示す構成ファイルのいずれかで、Oracle HTTP Server用のルーティングIDを構成できます。
opmn.xml
でルーティングIDを構成するには、Oracle HTTP Serverのias_component
セクションで次のように入力してください。
<module_data> <category id="start-parameters"> <data id="routing-id" value="my_id"/> </category> </module-data>
mod_oc4j.conf
でのルーティングIDの構成については、「Oc4jRoutingID」を参照してください。
ルーティング・モードの指定については、「Oc4jRoutingMode」を参照してください。
Oracle Application Server 10.1.3の場合、ルーティングIDおよびマウント・ポイントの検出機能が追加されています。これにより、最低限の構成変更で(あるいは構成を維持したまま)、OHSとOC4Jのルーティング関係を作成または変更できます。
OC4Jインスタンスは、Oracle Process Manager and Notification Server(OPMN)により起動および管理されます。
この項の内容は、次のとおりです。
この項では、httpd.confおよびmod_oc4j.conf内のすべての関連ディレクティブについて説明します。また、サンプル構成も示します。
mod_oc4j
のディレクティブは、mod_oc4j.conf
内に保持されます。mod_oc4j.conf
ファイルは、次のディレクティブを使用して、デフォルトでhttpd.conf
ファイルにインクルードされます。
include "ORACLE_HOME/ohs/conf/mod_oc4j.conf"
mod_oc4j
の構成には、次のディレクティブを使用します。
mod_oc4j
モジュールをロードします。
カテゴリ | 値 |
---|---|
構文 |
|
必須 |
あり |
デフォルト |
|
例 |
OC4J接続キャッシュのサイズを指定します。
使用されていない接続の最大アイドル時間(秒単位)を定義します。
カテゴリ | 値 |
---|---|
構文 |
|
必須 |
なし |
デフォルト |
なし |
例 |
|
使用方法 |
|
JSESSIONID_<
cookie_name_extension
>
をCookie内のOC4JのセッションIDとして使用するようにmod_oc4j
に対して指示します。
SSL環境変数の受渡しを制御します。
mod_oc4j
に対して、一部の環境変数をOracle HTTP ServerからOC4Jに渡すように指示します。
Oracle Application Server 10.1.3の場合、OC4Jのマウント・ポイントはONS通知に示されます。これにより、mod_OC4J
を使用して、ルーティング対象のOC4Jのマウント・ポイントを動的に検出および更新できます。静的なマウント・ポイント構成は不要になり、mod_OC4J
を使用して、Oracle HTTP Serverの停止および再起動を行わずマウント・ポイントを更新できます。静的なマウント・ポイントを使用する場合、次の構成情報を参照してください。また、Oc4jRoutingModeをStaticに設定する必要があります。
mod_oc4j
に対して、特定のパスを含むリクエストを宛先にルーティングするように指示します。宛先には、単一のOC4JプロセスまたはOC4Jインスタンスのセットを指定できます。
ベース・サーバーからマウント・ポイントをコピーします。
Oracle HTTP Serverでは、Oc4jRoutingID
を使用して1つ以上のルーティングIDを割り当てることができます。mod_oc4jがOc4jRoutingID
内のルーティングIDを持つOC4Jから通知を受信すると、ルーティング表を更新し、そのOC4Jへのルーティングを開始します。
カテゴリ | 値 |
---|---|
構文 |
|
パラメータ・タイプ |
文字列 |
デフォルト |
なし |
有効値 |
|
例 |
|
仮想サーバーのルーティングIDリストを親のルーティングIDリストにオーバーライドするか、両リストを統合するかを指定します。
カテゴリ | 値 |
---|---|
パラメータ名 |
|
パラメータ・タイプ |
文字列 |
有効値 |
|
デフォルト値 |
|
例 |
|
使用するルーティング・モードのタイプを指定します。ルーティング・モードは次のとおりです。
カテゴリ | 値 |
---|---|
パラメータ名 |
Oc4jRoutingMode |
パラメータ・タイプ |
|
有効値 |
|
デフォルト値 |
|
例 |
|
OC4Jから範囲内のエラーが返されたときに、ユーザーがOracle HTTP Serverのエラー・ページを使用して、エラー範囲を構成することを許可します。
この項では、mod_oc4j
のサンプル構成について説明します。
この構成では、URI /servlet/で始まるすべてのリクエストが、OC4Jプロセスのデフォルト・インスタンスにマウントされます。
httpd.conf
ファイルに次のエントリを作成します。
Oc4jMount /servlet/*
この構成では、Oc4jMount
ディレクティブのかわりに<Location
>コンテナ・ディレクティブを使用して、例6-1の構成と同じ動作を実行します。
httpd.conf
ファイルに次のエントリを作成します。
<Location /servlet> SetHandler oc4j-handler </Location>
この構成では、URI /servlet/
または/j2ee/
で始まるすべてのリクエスト、およびすべてのJSPページが、OC4JプロセスのデフォルトのOC4Jインスタンスにマウントされます。
mod_oc4j.conf
ファイルに次のエントリを作成します。
Oc4JMount /servlet/* Oc4JMount /*.jsp Oc4JMount /j2ee/*
この構成では、次のようにマウントが行われます。
/applicationA/
で始まるすべてのリクエストおよびすべてのJSPページが、oc4j_instance_A
にマウントされます。このインスタンスでは、すべてのOC4JプロセスがOPMNによって管理されます。
/applicationB/
で始まるすべてのリクエストが、oc4j_instance_B
にマウントされます。このインスタンスでは、すべてのOC4JプロセスがOPMNによって管理されます。mod_oc4j.conf
ファイルに次のエントリを作成します。
Oc4JMount /applicationA/* oc4j_instance_A Oc4JMount /applicationB/* oc4j_instance_B Oc4JMount /j2ee/* Oc4JMount /*.jsp oc4j_instance_A
メトリック・ベースのロード・バランシングも含め、mod_oc4j
によるロード・バランシングについては付録A「mod_oc4jを使用したロード・バランシング」で詳しく説明します。
オプションで、mod_oc4j
とOC4J間の通信に直接SSLサポートを指定できます。このためには、mod_oc4j
側とOC4J側でSSLを有効化する必要があります。
mod_oc4j
に対してSSLを有効にするには、次のディレクティブをmod_oc4j.conf
に追加します。
mod_oc4j
がOC4Jプロセスとの通信時にSSLを使用する必要があるかどうかを示します。Oc4jiASPTActiveが「On」に構成されている場合、このディレクティブは「On」に構成しないでください。
カテゴリ | 値 |
---|---|
パラメータ名 |
|
パラメータ・タイプ |
文字列 |
有効値 |
|
デフォルト値 |
|
Oc4jEnableSSLが「On」に設定されている場合、このディレクティブはOC4JプロセスとのSSL通信に使用されるSSL証明書を含む、Oracleウォレット・ファイルの位置を指定します。
カテゴリ | 値 |
---|---|
パラメータ名 |
|
パラメータ・タイプ |
文字列 |
有効値 |
OC4JプロセスとのSSL接続確立時に使用されるSSL証明書を含むウォレット・ディレクトリの場所へのパス |
デフォルト値 |
該当なし |
Oc4jEnableSSLが「On」に設定されている場合、この値はウォレット・ファイルのオープン時の認証に使用される、クリアテキストのパスワードです。この値は、Oracle Wallet Managerに含まれているユーティリティを使用して取得されます。
カテゴリ | 値 |
---|---|
パラメータ名 |
|
パラメータ・タイプ |
文字列 |
有効値 |
Oc4jSSLWalletFileにより指定されたウォレット・ファイルのオープン時の認証に使用されるクリアテキストのパスワード |
デフォルト値 |
該当なし |
mod_oc4j
とOC4Jの間でSSL通信を有効化するには、OC4J側でもSSLを有効化する必要があります。
Oracle Notification Service(ONS)およびOracle Process Manager and Notification Server(OPMN)を使用した統合サポートを提供します。これはOracleモジュールです。
mod_onsint
は次の機能を提供します。
mod_onsint
は、Oracle HTTP Serverインスタンス内のすべてのモジュールに対する通知を受信するプロセスを1つ提供します。
PROC_READY
ONS通知を発行します。また、DMSメトリックなどの情報やリスナーへの接続方法に関する情報も提供します。これらの通知は、Oracle HTTP Serverインスタンスが実行されているかぎり、mod_onsint
により定期的に送信されます。
mod_onsint
は、親プロセスをモニターします。親プロセスの異常終了を検出すると、残っている子プロセスをすべて中断します。この機能とOPMNが組み合されると、親プロセスが失敗したときでもOracle HTTP Serverを再起動できます。mod_onsint
は、Oracle HTTP Serverの子プロセスがすべて中断され、新しいOracle HTTP Serverインスタンス用にポートがオープンされた状態になるようにします。OPMNは、元のインスタンスの障害が検出された後、新規インスタンスが起動されるように保証します。
UNIXとWindowsではOracle HTTP Serverのアーキテクチャに違いがあるため、これらのプラットフォームではmod_onsint
の実装に多少の違いがあります。
UNIXでは、mod_onsint
はモジュールの初期設定時にプロセスを作成します。このプロセスでは、親プロセスの監視とONSメッセージの送受信を行います。ONS通知に関心がある他のモジュールからのコールバック・ファンクションは、このプロセス内に作成されます。この情報を他のOracle HTTP Serverの子プロセスと共有するには、メモリー・マップ・ファイルなどのプロセス間通信を使用する必要があります。UNIX上で親プロセスの障害が検出されると、すべての子プロセスにシグナルが送信され、すべての子プロセスがシャットダウンします。
Windowsでは、Oracle HTTP Serverは親プロセス、および全HTTPリクエストを処理するマルチスレッドの子プロセスという2つのプロセスのみで構成されます。このモデルでは、mod_onsint
は子プロセス内のスレッドとして実行されます。このスレッドが、親プロセスの監視とONSメッセージの送受信を行います。ONS通知に関心がある他のモジュールからのコールバック・ファンクションは、この子プロセス内に作成されます。親プロセスの障害が検出された場合、mod_onsint
は子プロセスを終了し、Oracle HTTP Serverを事実上シャットダウンします。
mod_onsint
に対して構成できるOpmnHostPort
というオプションのディレクティブがあります。このディレクティブを使用すると、mod_onsint
が動作中のOracle HTTP Serverインスタンスをpingするため、OPMNが使用するホスト名とポートを指定できます。OpmnHostPort
が指定されていないと、mod_onsint
はHTTPポートを自動的に選択します。状況によっては、OPMNがリスナーのpingに使用するHTTPポートとホスト名に特定のものを選択する場合があります。
OpmnHostPort
でOPMNに渡される値を指定するには、次のような構文を使用します。
OpmnHostPort [<http> | <https>://]<host>:<port>
たとえば、次の行は、OPMNがこのリスナーをpingするために、HTTP、localhostインタフェースおよびポート7778を使用する必要があることを指定します。
OpmnHostPort http://localhost:7778
このディレクティブは、httpd.confファイルのグローバル・セクションに指定する必要があります。ロケーション・コンテナの仮想ホストに埋め込むことはできません。インストール後、OpmnHostPort
ディレクティブはdms.confに置かれます。このディレクティブは、特殊なローカルホスト専用仮想ホストである、Oracle HTTP Serverの診断ポートに対するOPMNを指します。
Oracle HTTP Serverに対して強度の高い暗号化を有効にします。このOracleモジュールは、サーバーがSSLを使用できるようにするOracle HTTP Serverへのプラグインです。これは、OpenSSLモジュールのmod_ssl
と非常によく似ています。ただし、OpenSSLモジュールとは対照的に、mod_ossl
はSSLをサポートするOracleのSSL実装のバージョン3を基盤とし、かつCerticomおよびRSAセキュリティ・テクノロジに基づいています。
Oracle HTTP Serverでシングル・サインオンが有効になります。mod_osso
では、受信リクエストを検査して、リクエストされたリソースが保護されているかどうかを判断し、保護されている場合はユーザー用のOracle HTTP Server Cookieを取得します。これはOracleモジュールです。
Oracle HTTP ServerにPerlインタプリタが埋め込まれます。これにより、起動時のオーバーヘッドが排除され、モジュールをPerlで記述できます。Oracle Application Serverでは、Perlバージョン5.8.3を使用します。
この項では、データベースを使用するmod_perl
ユーザー向けに、ローカル・データベース接続をテストし、文字構成を設定する方法について説明します。
次の項では、Perlを使用したデータベース・アクセスについて説明します。Perlスクリプトは、Oracle用のDBI/DBDドライバを使用してデータベースにアクセスします。DBI/DBDドライバはOracle Application Serverに含まれています。このドライバは、Oracle Call Interface(OCI)をコールしてデータベースにアクセスします。
DBIが機能するには、httpd.confでDBIが有効である必要があります。これには次の手順を実行します。
httpd.conf
を編集します。
PerlModule Apache::DBI
」を検索します。
PerlModule Apache::DBI
」という行のコメントを解除します。
ORACLE_HOME/opmn/bin> opmnctl [verbose] restartproc ias-component=HTTP_Server
ファイルがORACLE_HOME
/ohs/cgi-bin
にコピーされます。
#!<ORACLE_HOME>/perl/bin/perl -w use DBI; my $dataSource = "host=<hostname.domain>;sid=<orclsid>;port=1521"; my $userName = "scott"; my $password = "tiger"; my $dbhandle = DBI->connect("dbi:Oracle:$dataSource", $userName, $password) or die "Can't connect to the Oracle Database: $DBI::errstr¥n"; print "Content-type: text/plain¥n¥n"; print "Database connection successful.¥n"; ### Now disconnect from the database $dbhandle->disconnect or warn "Database disconnect failed; $DBI::errstr¥n"; exit;
DBIスクリプトには次の場所からアクセスできます。
http://<hostname.domain>:<port>/cgi-bin/<scriptname> http://<hostname.domain>:<port>/perl/<scriptname>
スクリプトにuse DBI
ではなくuse Apache::DBI
と指定されている場合、このスクリプトを実行できるのは、http://<
hostname.domain>:<
port>/perl/<
scriptname>からのみです。
ローカル・シード・データベースのデータベース接続をテストするPerlスクリプトの例を次に示します。このスクリプトを使用して別のデータベース接続をテストするには、scott/tiger
をターゲット・データベースのユーザー名とパスワードに置き換える必要があります。
##### Perl script start ###### use DBI; print "Content-type: text/plain¥n¥n"; $dbh = DBI->connect("dbi:Oracle:", "scott/tiger", "") || die $DBI::errstr;
$stmt = $dbh->prepare("select * from emp order by empno")|| die $DBI::errstr; $rc = $stmt->execute() || die $DBI::errstr; while (($empno, $name) = $stmt->fetchrow()) { print "$empno $name¥n"; } warn $DBI::errstr if $DBI::err; die "fetch error: " . $DBI::errstr if $DBI::err; $stmt->finish() || die "can't close cursor"; $dbh->disconnect() || die "cant't log off Oracle"; ##### Perl script End ######
SQL
NCHAR
データ型は、Oracle9i以降さらに改良され、信頼性の高いUnicodeデータ型と呼ばれています。NCHAR
、NVARCHAR2
およびNCLOB
などのSQL
NCHAR
データ型を使用すると、あらゆるUnicode文字をデータベースのキャラクタ・セットに関係なく格納できます。これらのデータ型のキャラクタ・セットは、各国語キャラクタ・セット、つまりAL16UTF-16またはUTF8で指定します。
このリリースのDBD::Oracle
はSQL
NCHAR
データ型をサポートしており、データ・バインド用の文字構成を指定できるようにドライバ拡張機能が用意されています。次のスクリプトに、SQL
NCHAR
データへのアクセス例を示します。
# declare to use the constants for character forms use DBD::Oracle qw(:ora_forms); # connect to the database and get the database handle $dbh = DBI->connect( ... ); # prepare the statement and get the statement handle $sth = $dbh->prepare( 'SELECT * FROM TABLE_N WHERE NCOL1 = :nchar1' ); # bind the parameter of a NCHAR type $sth->bind_param( ':nchar1', $param_1 ); # set the character form to NCHAR $sth->func( { ':nchar1' => ORA_NCHAR } , 'set_form' ); $sth->execute;
例6-7に示すように、set_formファンクションはプライベート・ファンクションとして提供されており、標準のDBI func()
メソッドで起動できます。このファンクションは、どのプレースホルダをどの文字構成に関連付けるかを指定する匿名ハッシュを取ります。文字構成の有効値は、ORA_IMPLICIT
またはORA_NCHAR
のいずれかです。文字構成をORA_IMPLICIT
に設定すると、アプリケーションのバインド・データはデータベースのキャラクタ・セットに変換され、ORA_NCHAR
に設定すると各国語キャラクタ・セットに変換されます。デフォルト構成はORA_IMPLICIT
です。
デフォルトのキャラクタ・セット構成を指定できるように、次のようにもう1つのファンクションも用意されています。
# specify the default form to be NCHAR $dbh->func( ORA_NCHAR, 'set_default_form' );
このコールの後は、set_form
のコールで特に指定しないかぎり、すべてのパラメータの構成がORA_NCHAR
になります。set_form
ファンクションとは異なり、これはデータベース・ハンドルのファンクションであるため、指定したデフォルト構成のデータベース・ハンドルの各文は、デフォルトで選択した構成であることに注意してください。
このファンクションでは、パラメータの文字構成を設定します。有効な構成は、ORA_IMPLICIT
(デフォルト)またはORA_NCHAR
です。この定数は、DBD::Oracle
ではora_forms
として使用できます。
# a declaration example for the constants ORA_IMPLICIT and ORA_NCHAR use DBD::Oracle qw(:ora_forms); # set the character form for the placeholder :nchar1 to NCHAR $sth->func( { ':nchar1' => ORA_NCHAR } , 'set_form' ); # set the character form using the positional index $sth->func( { 2 => ORA_NCHAR } , 'set_form' ); # set the character form for multiple placeholders at once $sth->func( { 1 => ORA_NCHAR, 2 => ORA_NCHAR } , 'set_form' );
このファンクションでは、データベース・ハンドルのデフォルトの文字構成を設定します。
$dbh->func( ORA_NCHAR , 'set_default_form' );
PHP(PHP: Hypertext Preprocessorの略)は、オープン・ソースで広く採用されている汎用クライアント側スクリプト言語で、標準HTMLに埋め込まれます。この言語は、動的HTMLページの生成に使用されます。Oracle HTTP Serverでは、mod_php
を介してPHPサポートが提供されます。また、Oracle Databaseサポートも有効になっています。使用されるPHPはバージョン4.3.9です。
FTP
、CONNECT
(SSL用)、HTTP/0.9、HTTP/1.0およびHTTP/1.1用のプロキシ機能を提供します。
Oracle HTTP Serverでは、URL操作ツールとしてmod_rewrite
が提供されます。mod_rewrite
では、リクエストされたURLをリライトするために正規表現パーサーに基づくリライト・エンジンが使用されます。URL操作の粒度は、サーバー変数、環境変数、HTTPヘッダーおよびタイムスタンプの書式の影響を受ける場合があります。
このモジュールは、サーバー単位のコンテキスト(httpd.conf)およびディレクトリ単位のコンテキスト(.htaccess
)の両方でURL全体(path-info部を含む)に対して動作し、結果のquery-string部を生成できます。
この項の内容は、次のとおりです。
ApacheではHTTPがフェーズ単位で処理されます。これらの各フェーズ用のフックは、Apache APIにより提供されます。mod_rewrite
では、このうちの2つのフックを使用します。一方はURL-to-filename変換フックで、HTTPリクエストが読み取られてから認可が開始される間に使用されます。他方はFixupフックで、認可フェーズの後、およびディレクトリ単位の構成ファイル(.htaccess
)が読み取られてからコンテンツ・ハンドラが有効化される間にトリガーされます。
mod_rewrite
は、構成構造から構成済ルールセットを読み取ります。サーバー・レベルのルールセットは起動時に最適であるように構成されますが、ディレクトリ・レベルのルールセットはカーネルによるディレクトリ・アクセス時に構成されます。
mod_rewrite
はルールセット内でルールを1つずつループし(RewriteRule
ディレクティブ)、特定のルールが一致すると、対応する条件をループします(RewriteCond
ディレクティブ)。最初に、URLが各ルールのPattern
に対して照合されます。照合できなかった場合、mod_rewrite
は対応しているルール条件を検索します。ルール条件が存在しない場合は、URLを文字列Substitution
からなる新規の値に単に置換して、ルールのループを継続します。ただし、条件が存在する場合は、内側のループを開始して各条件をリストされている順に処理します。
条件が存在する場合、変数を拡張して文字列TestString
を作成し、マップ参照を逆参照し、CondPattern
を拡張されたTestString
と照合します。パターンが一致しないと、条件および対応するルールのセット全体が失敗します。パターンが一致すると、他に使用可能な条件がなくなるまで次の条件が処理されます。すべての条件が一致すると、処理が続行され、Substitution
を使用してURLが置換されます。
http://
yourserver
//oldpath/rqstdrsrc
など、複数のスラッシュ(/)を含むURLのリクエストの場合、RewriteCond
およびRewriteRule
が正しく記述されていない場合は、//oldpath
はこの2つのディレクティブをバイパスできます。
たとえば、次のルールがあるとします。
RewriteRule ^/oldpath(.*) /newpath$1 [R]
http://
yourserver
/oldpath/files
のリクエストはリダイレクトされ、予想どおりのページhttp://
yourserver
/newpath/files
が戻されます。
ただし、http://
yourserver
//oldpath/files
のリクエストはこのルールをバイパスし、予想していなかったページを提供する可能性があります。ルールで複数のスラッシュ(/)が取得されることを確認することで、この問題を回避できます。前述の例を解決するには、次のように置換を使用する必要があります。
RewriteRule ^/+somepath(.*) /otherpath$1 [R]
この項では、次のmod_rewrite
のディレクティブについて説明します。
ランタイム・リライト・エンジンを有効化または無効化します。「Off」に設定すると、このモジュールではランタイム処理が実行されません。このディレクティブを使用して、すべてのRewriteRule
のディレクティブをコメント化するかわりにモジュールを無効にします。
リライト構成は、デフォルトで継承されません。つまり、ReWriteEngine On
ディレクティブを使用する各仮想ホストに対して指定する必要があります。
RewriteOptions
'inherit'を指定すると、親の構成を子に継承させることができます。仮想サーバー・コンテキストでは、これはメイン・サーバーのマップ、条件およびルールが継承されることを意味します。ディレクトリ・コンテキストでは、これは親ディレクトリの.htaccess
構成の条件とルールが継承されることを意味します。
実行するリライト・アクションがサーバーによって記録されるファイルの名前を設定します。このファイル名の先頭にスラッシュ(/)がない場合は、Server Root
への相対ファイル名とみなされます。ロギングを無効にするには、RewriteLog
ディレクティブを削除またはコメント化するか、RewriteLogLevel 0
を使用します。ファイル名を/dev/null
に設定して、ロギングを禁止しないでください。このように設定すると、サーバーが低速になり、メリットはありません。
リライト・ログ・ファイルの詳細レベルを設定します。デフォルト・レベルである0(ゼロ)はロギングなしを意味し、9以上の値を指定すると実際には全アクションが記録されます。
ディレクトリ単位のリライト用のベースURLを明示的に設定します。リライト・ルールをディレクトリ単位の構成(.htaccess
)ファイルで使用できます。新規URLの置換が発生する場合は、サーバー処理にベースURLを追加する必要があります。これを可能にするには、対応するURL接頭辞またはURLベースをモジュールで認識する必要があります。デフォルトでは、この接頭辞自体が対応するファイル・パスです。ただし、ほとんどのWebサイトでは、URLは物理ファイル名のパスに直接関連付けられていません。このような場合は、RewriteBase
ディレクティブを使用して正しいURL接頭辞を指定する必要があります。
WebサーバーのURLが物理ファイルのパスに直接関連付けられていない場合は、RewriteRule
ディレクティブを使用する各.htaccess
ファイル内でRewriteBase
を使用する必要があります。
次のディレクトリ単位の構成ファイルがあるとします。
## /abc/def/.htaccess - - per-dir config file for directory /abc/def # /abc/def is the physical path of /xyz, RewriteEngine On RewriteBase /xyz RewriteRule ^oldstuff¥.html$ newstuff.html
例6-10では、/xyz/oldstuff.html
のリクエストは物理ファイル/abc/def/newstff.html
に正確にリライトされます。
表6-2に、リライト・ルールを使用するためのヒントを示します。
値 | 定義 |
---|---|
. |
任意の1文字 |
[char] |
大カッコで囲まれた任意の文字 |
b* |
任意の数の文字bからなる文字列 |
.* |
任意の数の任意の文字からなる文字列 |
たとえば、/demo1
、/demo2
および/demo3
からのリクエストを/alldemos
にリダイレクトするには、リライト・ルールを次のどちらかとして記述します。
RewriteRule /demo. /alldemos [R]
または
RewriteRule /demo [123] /alldemos [R]
/DemoA
、/DemoB
および/DemoC
を/alldemos
にリダイレクトする場合は、次のように、前述のリライト・ルールにNC(no case)を追加します。
RewriteRule /demo [123] /alldemos [R, NC]
"."は1文字のみを処理するため、このリライト・ルールは/demonstration1
から/demos
へのリダイレクトには機能しません。demoで始まるURLすべてを後続の文字に関係なくリダイレクト可能にするには、次のリライト・ルールを使用します。
RewriteRule ^/demo* /alldemos [R, NC]
前述の例では、^は始まりを意味し、*はdemoの後の任意の文字を意味します。
/demo1/not_just_index.html
に対してリクエストがある場合、前述のすべてのリライト・ルールではリクエストは/alldemos/index.html
にリダイレクトされますが、これは意図した結果でない場合があります。表6-3に示すように、/alldemos
内の対応するファイルにリダイレクトする必要があります。
リクエストの内容 | リダイレクト先 |
---|---|
|
|
|
|
|
|
次のように、リライト・ルールに置換を使用する必要があります。
RewriteRule ^/demos1(.*)$ //alldemos/$1 [R NC]
このルールの内容は、次のとおりです。
happy.html
、go.jpg
およびlucky.jpg
など、demo1
の後に指定されている式の値が変数($1)として使用され、/alldemos/
の後で置換されます。
リクエストをDocumentRoot
からnewroot
ディレクトリにリダイレクトする場合は、次のmod_rewrite
のディレクティブを設定します。
RewriteEngine On RewriteRule ^/(.*)$ /newroot/$1 [R]
あるディレクトリ(olddir
)から別のディレクトリ(newdir
)にファイル・リクエストを送信する場合は、次のディレクティブを設定します。
RewriteEngine On RewriteRule ^/olddir(.*)$ /newdir/$1 [R]
どちらの場合も、リクエストされたリソースがリダイレクト先で実際に使用可能かどうかを確認する必要があります。mod_rewrite
モジュールは、リクエストされたリソースが新しい場所にあるかどうかを確認しません。
HTTP
TRACE
メソッドを使用してリクエストをすべて無効にする場合は、次のmod_rewrite
のディレクティブを設定します。
RewriteEngine On RewriteCond %{REQUEST_METHOD} ^TRACE RewriteRule .* - [F]
既知または未知の攻撃からWebアプリケーションを保護し、セキュリティの向上を図ります。
リクエストの特性に基づいて環境変数を設定できます。
スペルに誤りがあるURLや、誤って大文字で記述されたURLが訂正されます。
サーバー・アクティビティとパフォーマンスに関するHTMLページが表示されます。
リクエストごとに一意のIDが作成されます。このモジュールは、UNIXでのみ使用可能です。
リクエストがユーザー固有のディレクトリにマップされます。
ログが作成され、ユーザー・アクティビティが追跡されます。
動的に構成された大量の仮想ホスト設定が有効化されます。
|
Copyright © 2007 Oracle Corporation. All Rights Reserved. |
|