obj.conf
ファイルには、HTTPリクエスト処理のディレクティブが含まれます。obj.conf
ファイルは、INSTANCE_HOME/net-configuration_name
/config
ディレクトリにあります。
obj.conf
ファイルは、Oracle Traffic Directorのインストール中に作成されます。Oracle Traffic Director管理者コンソールまたはコマンドライン・インタフェース(CLI)を使用して複数の仮想サーバーを構成すると、仮想サーバーごとに個別のobj.conf
ファイルを作成できます。これらのファイルの名前は、virtual-server-name-obj.conf
になります。virtual-server-name
は仮想サーバーの名前です。
管理者コンソールまたはCLIを使用して行った変更がobj.conf
ファイルに影響しない場合、仮想サーバー固有の新しいobj.conf
ファイルは作成されず、構成のすべての仮想サーバーでデフォルトのobj.conf
ファイルが使用されます。
管理者コンソールまたはCLIを使用して行った変更がobj.conf
ファイルに影響する場合、仮想サーバーごとに新しいobj.conf
ファイルが作成されます。server.xml
ファイルは、各仮想サーバーで使用される適切なobj.conf
ファイルを反映するように即座に更新されます。2つの仮想サーバー(vs1
とvs2
)が存在する場合、仮想サーバー固有の新しい2つのobj.conf
ファイル(vs1-obj.conf
とvs2-obj.conf
)が作成されます。これらの新しいファイルは、2つの仮想サーバーで使用される正確なobject-file
に基づいてserver.xml
ファイルで更新されます。
<object-file>vs1-obj.conf</object-file>
<object-file>vs2-obj.conf</object-file>
これ以降、デフォルトのobj.conf
ファイルの更新、使用または削除は行われません。ただし、2つの仮想サーバーのいずれかでobj.conf
ファイルを変更する場合、元のobj.conf
ファイルではなく、個々のファイルのみを編集する必要があります。
このドキュメントでは、obj.conf
ファイルは、server.xml
ファイルのvirtual-server
要素のobject-file
サブ要素で指定されたobj.conf
ファイルを示します。
この章では、obj.conf
のディレクティブ、Object
、Client
、If
、ElseIf
、Else
タグの使用方法、obj.conf
での制御フロー、およびobj.conf
を編集する場合の構文ルールについて説明します。
この章の内容は次のとおりです。
Oracle Traffic Directorを最初に起動すると、いくつかの初期化タスクが実行され、クライアント(ブラウザなど)からのHTTPリクエストが待機されます。Oracle Traffic Directorは、リクエストを受信すると、最初に仮想サーバーを選択します。選択された仮想サーバーのobj.conf
ファイルによって、Oracle Traffic Directorのリクエスト処理方法が決定されます。
obj.conf
ファイルには、リクエスト処理プロセスの各ステージでOracle Traffic Directorに実行内容を指示するディレクティブと呼ばれる一連の命令が含まれます。これらのディレクティブは、Object
タグの内部にグループ化されます。各ディレクティブは、1つ以上の引数がある関数を起動します。
各ディレクティブは、リクエスト処理プロセスの特定のステージに適用されます。たとえば、リクエスト処理プロセスの認可ステージで適用されるディレクティブは、AuthTrans
ディレクティブです。
リクエストで送信された認可情報(名前やパスワードなど)を検証します。
論理URIをローカル・ファイル・システム・パスに変換します。
ローカル・ファイル・システム・パスの有効性をチェックし、ファイル・システムでリクエストされているリソースに対するアクセス権限をリクエスタが持っているかどうかをチェックします。
Oracle Traffic Directorからオリジン・サーバーへの情報のフローを制御し、オリジン・サーバーの接続属性に対してOracle Traffic Directorを構成します。
Service
ステップで読み取られる着信リクエスト・データを処理するフィルタを選択します。
Service
ステップで生成される発信レスポンス・データを処理するフィルタを選択します。
リクエストをルーティングする場所を選択します。
レスポンスを生成してクライアントに返します。
ログ・ファイルにエントリを追加します。
クライアントにエラー・メッセージを送信して処理を終了します。このステップは、前のステップでエラーが発生した場合にのみ実行されます。
obj.conf
ファイルのディレクティブによって、サーバー・アプリケーション関数(SAF)と呼ばれる関数が起動されます。各ディレクティブは、関数をコールするタイミングを示してそのパラメータを指定することで、関数をコールします。
Directive fn="function" name1="value1"...nameN="valueN"
関数(fn
)パラメータの値は、実行するSAFの名前です。すべてのディレクティブで、fn
パラメータの値を指定する必要があります。関数がない場合、命令では何も実行されません。残りのパラメータは、関数で必要とされる引数ですが、これらは関数ごとに異なります。
パラメータには、変数および式への参照を含めることができます。変数には、事前定義された変数、set-variable
SAFを使用してリクエスト時に定義された変数、またはserver.xml
ファイルで定義された変数を指定できます。set-variable
SAFの詳細は、5.12.6項「set-variable」を参照してください。server.xml
ファイルの変数を定義する方法の詳細は、3.1.38項「variable」を参照してください。式および変数の詳細は、付録A「変数、式、ワイルドカードおよび文字列補間の使用」を参照してください。
Oracle Traffic Directorには、obj.conf
ファイルのディレクティブの作成および変更に使用できる組込みSAFのセットが含まれます。これらのSAFの詳細は、第5項「obj.confの事前定義済のサーバー・アプリケーション関数およびフィルタ」を参照してください。
magnus.conf
ファイルには、NSAPIプラグインを初期化するInit
ディレクティブSAFが含まれます。
obj.conf
ファイルのディレクティブは、Object
タグにグループ化されます。default
オブジェクトには、リクエストを処理するデフォルトの方法に関するOracle Traffic Directorへの命令が含まれます。各新規オブジェクトは、オブジェクトのdefault
動作を変更します。
Object
タグには、name
またはppath
属性を含めることができます。どちらのパラメータでも、ワイルドカード・パターンを使用できます。
Oracle Traffic Directorは、default
オブジェクトのディレクティブを処理することで、リクエストの処理を開始します。ただし、Oracle Traffic Directorは、次の条件のいずれかが満たされると、default
オブジェクトのNameTrans
ステージの後に別のオブジェクトのディレクティブを処理します。
成功したNameTrans
ディレクティブがname
引数を指定している場合。
NameTrans
ステージでの結果に基づく物理パス名が別のオブジェクトのppath
属性と一致している場合。
default
オブジェクト以外のオブジェクトを使用するようにOracle Traffic Directorが変更されている場合、default
オブジェクトのディレクティブを処理する前に、その別のオブジェクトのディレクティブが処理されます。プロセスの一部のステップでは、Oracle Traffic Directorは、Service
ステージなどの特定のステージのディレクティブについて、あるディレクティブの実行に成功すると即座に処理を停止します。これに対し、別のステージでは、Oracle Traffic Directorは、default
オブジェクトと追加オブジェクトのディレクティブを含め、そのステージのすべてのディレクティブを処理します。詳細は、「obj.confの制御フロー」を参照してください。
default
オブジェクトのNameTrans
ディレクティブでname
引数が指定されている場合、Oracle Traffic Directorは、default
オブジェクトの残りのディレクティブを処理する前に、その名前のオブジェクトに含まれるディレクティブを処理します。
Oracle Traffic Directorがdefault
オブジェクトのNameTrans
ディレクティブの処理を完了すると、リクエストの論理URLが物理パス名に変換されます。この物理パス名がobj.conf
ファイルの別のオブジェクトのppath
属性に一致する場合、Oracle Traffic Directorは、default
オブジェクトの残りのディレクティブを処理する前に、そのオブジェクトのディレクティブを処理します。
Object
タグ内では、追加タグを使用できます。これらのタグによって、オブジェクト内のディレクティブを起動する場合の柔軟性が向上します。
Client
タグによって、一連のディレクティブの実行を、特定のクライアントから受信したリクエストに制限できます。Client
タグ内にリストされたディレクティブは、クライアント・リクエストの情報が、指定されたパラメータ値に一致する場合にのみ実行されます。
表4-1に、Clientタグのパラメータを示します。
表4-1 Clientタグのパラメータ
パラメータ | 説明 |
---|---|
|
ブラウザからOracle Traffic Directorに送信される |
|
チャンク・エンコーディングをリクエストするクライアントによって設定されたブール値。 |
|
HTTPレスポンス・コード。 |
|
クライアントのDNS名。 |
|
内部で生成されたリクエストを示すブール値。 |
|
クライアントのIPアドレス。 |
|
クライアントがキープ・アライブ接続をリクエストしたかどうかを示すブール値。 |
|
SSLトランザクションで使用される鍵サイズ。 |
|
|
|
ブラウザで使用されるHTTPメソッド。 |
|
前の |
|
囲まれたディレクティブを評価するためのランダム値。値には、パーセントまたは比率を指定できます(20%や1/5など)。 |
|
リクエストされたリソースに対する物理パス。 |
|
リクエストされたリソースの物理パス。 |
|
リクエストで送信された問合せ文字列。 |
|
HTTPレスポンス・コードのテキスト・バージョン。 |
|
リクエストが再起動されたことを示すブール値。 |
|
SSLトランザクションで使用される秘密鍵サイズ。 |
|
暗号化されたリクエスト。 |
|
リクエストされたドキュメントのタイプ( |
|
ブラウザからのリクエストのURIセクション。 |
|
クライアントでリクエストされた仮想サーバーのDNS名。(値は、クライアント・リクエストの |
|
クライアントによるリクエストに基づいて、次のように特定のサイトへのアクセスを禁止します。 Client variable-headers="Weferer:SKVFVWRKJVZCMHVIBGDA Service type="image/*" fn="deny-existence" </Client> |
Client
タグのパラメータによって、If
ディレクティブの実行時に詳細な制御を行うことができます。次の例では、odds
パラメータによって、リクエストは25%の確率でリダイレクトされます。
<Client odds="25%"> NameTrans fn="redirect" from="/Pogues" url-prefix="http://pogues.example.com" </Client>
1つ以上のワイルドカード・パターンを使用して、Client
タグのパラメータ値を指定できます。ワイルドカードを使用して、Client
タグで指定されたパラメータ値に一致するクライアントを除外することもできます。次の例では、Client
タグとAddLog
ディレクティブを組み合せて、すべてのクライアントからのアクセス・リクエストを、指定したサブネットからのものを除いてログに記録するようにOracle Traffic Directorに指示しています。
<Client ip="*~192.85.250.*"> AddLog fn="flex-log" name="access" </Client>
Client
タグのmatch
パラメータをnone
に設定することで、除外項目を作成することもできます。次の例では、仮想サーバーexample.com
に対するすべてのリクエストと同様に、指定したサブネットからのリクエストが除外されます。
<Client match="none" ip="192.85.250.*" urlhost="www.example.com"> AddLog fn="flex-log" name="access" </Client>
ワイルドカード・パターンの詳細は、A.5項「ワイルドカード・パターン」を参照してください。
Client
タグと同様に、これらのタグはObject
タグの内部にのみ出現します。また、これらのタグで式を評価して、含まれている1つ以上のディレクティブを条件付きで実行できます。詳細は、A.1項「If、ElseIfおよびElseタグ」を参照してください。
Oracle Traffic Directorでリクエストを処理するには、リクエストを適切な仮想サーバーに転送する必要があります。仮想サーバーの決定後、Oracle Traffic Directorは、指定された仮想サーバーのobj.conf
ファイルを実行します。この項では、Oracle Traffic Directorがobj.conf
内で実行するディレクティブを決定する方法について説明します。
Oracle Traffic Directorは、リクエストを受信すると、default
オブジェクトのAuthTrans
ディレクティブを実行して、クライアントがOracle Traffic Directorへのアクセスを許可されているかどうかをチェックします。複数のAuthTrans
ディレクティブが存在する場合、Oracle Traffic Directorは、いずれかのディレクティブでエラーが発生しないかぎり、ユーザーの認可に成功するまで各ディレクティブを順番に実行します。エラーが発生すると、Oracle Traffic Directorは、Error
ディレクティブ以外の他のすべてのディレクティブをスキップします。
AuthTrans
ディレクティブは、PathCheck
ディレクティブと組み合せて使用します。AuthTrans
ディレクティブは、リクエストに関連付けられたユーザー名とパスワードが受入れ可能であるかどうかをチェックしますが、リクエストに対するアクセスの許可または拒否は行いません。この処理は、PathCheck
ディレクティブが実行します。
認可プロセスは、複数の認可スキームを容易に統合し、認可情報を記録するリソースを柔軟に確保するため、2つのステップに分割されます。
クライアントが最初にリクエストを作成したときには、ユーザー名とパスワードは不明です。AuthTrans
ディレクティブは、リクエストに関連付けられたヘッダーからユーザー名とパスワードを取得します。AuthTrans
ディレクティブとPathCheck
ディレクティブは、ユーザー名とパスワードを検証できない場合、連携してリクエストを拒否します。リクエストが拒否されると、Oracle Traffic Directorにダイアログ・ボックスが表示されます。クライアントは、ヘッダーにユーザー名とパスワードを含めてリクエストを再送信します。
Oracle Traffic Directorは、default
オブジェクトのNameTrans
ディレクティブを実行して、名前付きオブジェクト(ルーティング・ルールを指定するオブジェクトなど)をリクエストされたリソースのURLに関連付けます。
Oracle Traffic Directorは、適用可能なディレクティブを検出するまで、default
オブジェクトの各NameTrans
ディレクティブを順番に評価します。
Oracle Traffic DirectorはすべてのNameTrans
ディレクティブを実行するとはかぎらないため、ディレクティブの出現順序が重要になります。
NameTrans
ディレクティブを実行した結果、Oracle Traffic Directorが別のオブジェクトのディレクティブの処理を開始することがあります。これは、正常に実行されたNameTrans
ディレクティブによって名前が指定されるか、別のオブジェクトのname
またはppath
属性に一致する部分パスが生成されると発生します。
成功したNameTrans
ディレクティブによってname
引数の指定により名前が割り当てられると、Oracle Traffic Directorは、object
タグで定義された名前付きオブジェクトのディレクティブの処理を開始し、その後でリクエスト処理プロセスの残りとしてdefault
オブジェクトのディレクティブを処理します。
NameTrans
ステップでリクエストされたリソースの論理URLを物理パス名に変換した後、Oracle Traffic Directorは、PathCheck
ディレクティブを実行して、クライアントがリクエストされたリソースにアクセスできるかどうかを検証します。
複数のPathCheck
ディレクティブが存在する場合、Oracle Traffic Directorは、いずれかのディレクティブによってアクセスが拒否されないかぎり、すべてのディレクティブをその出現順序に従って実行します。アクセスが拒否されると、Oracle Traffic Directorは、Error
セクションのディレクティブに実行を切り替えます。
NameTrans
ディレクティブによって名前が割り当てられているか、別のオブジェクトのname
またはppath
属性に一致する物理パス名が生成された場合、Oracle Traffic Directorは、default
オブジェクトのディレクティブを適用する前に、まずその一致するオブジェクトのPathCheck
ディレクティブを適用します。
PathCheck
ディレクティブによってアクセスが承認されると、Oracle Traffic Directorは、次にObjectType
ディレクティブを実行してリクエストのMIMEタイプを決定します。MIMEタイプには、type
、encoding
およびlanguage
という3つの属性があります。Oracle Traffic Directorがクライアントにレスポンスを送信すると、type
、language
およびencoding
の各値がレスポンスのヘッダーに含まれて送信されます。type
は、Oracle Traffic Directorが、クライアントに対するレスポンスを生成するために実行するService
ディレクティブを決定する場合にも特に役立ちます。
複数のObjectType
ディレクティブが存在する場合、Oracle Traffic Directorは、すべてのディレクティブをその出現順序に従って適用します。ただし、ディレクティブによってMIMEタイプの属性が一度設定されると、その後同じ属性を設定しようとしても無視されます。すべてのObjectType
ディレクティブが適用される理由は、1つのディレクティブは1つの属性(type
など)を設定し、別のディレクティブは別の属性(language
など)を設定するためです。
PathCheck
ディレクティブの場合と同様に、NameTrans
ステップの結果としてリクエストに別のオブジェクトが一致した場合、Oracle Traffic Directorは、default
オブジェクトのObjectType
ディレクティブを実行する前に、その一致するオブジェクトのObjectType
ディレクティブを実行します。
Input
ディレクティブは、Service
ステップで読み取られる着信リクエスト・データを処理するフィルタを選択します。Input
ディレクティブは、Oracle Traffic Directorまたはプラグインがクライアントからエンティティ本文データを最初に読み取ろうとしたときに起動されます。リクエスト処理プロセスのInput
ステージでinsert-filter
SAFを起動することで、着信データを処理するNSAPIフィルタを追加できます。NSAPIフィルタによって、ある関数を使用して、別の関数に提供されるコンテンツまたは別の関数で生成されるコンテンツをインターセプトして潜在的に変更できます。Input
ディレクティブは、1つのリクエストごとに1回実行されます。
2つ以上のフィルタをフィルタ・スタックの同じ場所に定義する場合、obj.conf
のInput fn="insert-filter"
ディレクティブとOutput fn="insert-filter"
ディレクティブの順序が重要になります。後に挿入されたフィルタは、先に挿入されたフィルタより上に出現します。
Output
ディレクティブは、Service
ステップで生成される発信レスポンス・データを処理するフィルタを選択します。Output
ディレクティブによって、insert-filter
SAFを起動して、発信データを処理するNSAPIフィルタをインストールできます。NSAPIフィルタによって、ある関数を使用して、別の関数に提供されるコンテンツまたは別の関数で生成されるコンテンツをインターセプトして潜在的に変更できます。Output
ディレクティブは、Oracle Traffic Directorまたはプラグインがクライアントからエンティティ本文データを最初に書き込もうとしたときに実行されます。Output
ディレクティブは、1つのリクエストごとに1回実行されます。
2つ以上のフィルタをフィルタ・スタックの同じ場所に定義する場合、obj.conf
のInput fn="insert-filter"
ディレクティブとOutput fn="insert-filter"
ディレクティブの順序が重要になります。後に挿入されたフィルタは、先に挿入されたフィルタより上に出現します。
Service
ディレクティブで、HTTPリクエストを別のサーバーに送信する必要がある場合、Oracle Traffic Directorは、Route
ディレクティブを実行してリクエストのルーティング方法を決定します。リクエストのルーティングには、リクエストにサービスを提供するOracle Traffic Directorを選択することや、リクエストを送信するためのプロキシを選択することが含まれます。
Oracle Traffic Directorは、Service
ディレクティブを実行して、クライアントに送信するためのレスポンスを生成します。Oracle Traffic Directorは、各Service
ディレクティブを参照して、タイプ、メソッドおよび問合せ文字列に一致する最初のディレクティブを検出します。Service
ディレクティブでタイプ、メソッドまたは問合せ文字列が指定されない場合、未指定の属性は任意の項目に一致します。
複数のService
ディレクティブが存在する場合、Oracle Traffic Directorは、リクエストの条件に一致する最初のディレクティブを適用し、残りのすべてのService
ディレクティブは無視します。
PathCheck
およびObjectType
ディレクティブでは、NameTrans
ステップの結果としてリクエストに別のオブジェクトが一致した場合、Oracle Traffic Directorは、default
オブジェクトのディレクティブを処理する前に、一致するオブジェクトのService
ディレクティブを確認します。Oracle Traffic Directorが一致するオブジェクトのService
ディレクティブの実行に成功した場合、Service
ディレクティブの実行は1つのみにかぎられることから、default
オブジェクトのService
ディレクティブは実行されません。
Oracle Traffic Directorは、レスポンスを生成してクライアントに送信した後、AddLog
ディレクティブを実行してエントリをログ・ファイルに追加します。すべてのAddLog
ディレクティブが実行されます。Oracle Traffic Directorは、複数のログ・ファイルにエントリを追加します。
リクエストされたリソースに対するアクセスがPathCheck
またはAuthTrans
ディレクティブによって拒否される、またはリクエストされたリソースが存在しないなど、リクエスト処理プロセス中にエラーが発生した場合、SAFによってHTTPレスポンス・ステータス・コードが設定され、値REQ_ABORTED
が返されます。この場合、Oracle Traffic Directorは、リクエストの処理を停止します。かわりに、HTTPレスポンス・ステータス・コードまたは関連する理由フレーズに一致するError
ディレクティブを検索し、そのディレクティブの関数を実行します。Oracle Traffic Directorは、一致するError
ディレクティブを検出できない場合、クライアントにレスポンス・ステータス・コードを返します。
機能フローは、通常のリクエスト処理プロセスから変更される場合があります。これは、内部リダイレクト、再起動およびURI変換機能の実行中に発生します。
リクエストは再起動できます。たとえば、PathCheck
ディレクティブでは、http://
server_name/
に対するリクエストをhttp://
server_name/index.html
に対するリクエストとして再起動できます。
Oracle Traffic Directorは、内部リクエストを生成できます。たとえば、SHTMLファイルまたはサーブレットにファイルを含めることができます。Oracle Traffic Directorは、元のリクエストの処理中に、このファイルを取得するための内部リクエストを作成します。
このファイルを変更する場合は慎重に作業してください。単純な間違いでも、Oracle Traffic Directorの起動や動作に障害が発生する可能性があります。
Oracle Traffic Directorは、obj.conf
での出現順序に従って各ディレクティブを実行するため、ディレクティブの順序は重要です。あるディレクティブの結果は、別のディレクティブの実行に影響します。
PathCheck
ディレクティブの場合、Oracle Traffic DirectorはすべてのPathCheck
ディレクティブを実行するため、PathCheck
セクション内の順序は重要ではありません。ただし、ObjectType
ディレクティブで属性値を設定する場合、他のObjectType
ディレクティブではその値を変更できないため、ObjectType
セクション内の順序は非常に重要です。
同様に、Service
セクション内のディレクティブの順序も非常に重要です。Oracle Traffic Directorは、現在のリクエストに一致する最初のService
ディレクティブを実行し、その他のディレクティブは実行しません。
C言語の関数名は、文字、数字およびアンダースコアで構成されます。Cコードの関数名では、構成ファイルでアンダースコア(_)のかわりにハイフン(-)を使用できます。これは、関数名にのみ適用されます。