obj.confファイルには、HTTPリクエスト処理のディレクティブが含まれます。
obj.confファイルは、Oracle Traffic Directorのインストール中に作成されます。Oracle Traffic Director管理者コンソールまたはコマンドライン・インタフェース(CLI)を使用して複数の仮想サーバーを構成すると、仮想サーバーごとに個別のobj.confファイルを作成できます。これらのファイルの名前は、virtual-server-name-obj.confになります。virtual-server-nameは仮想サーバーの名前です。
これ以降、デフォルトの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ディレクティブです。
obj.confファイルのディレクティブによって、サーバー・アプリケーション関数(SAF)と呼ばれる関数が起動されます。各ディレクティブは、関数をコールするタイミングを示してそのパラメータを指定することで、関数をコールします。
Directive fn="function" name1="value1"...nameN="valueN"
関数(fn)パラメータの値は、実行するSAFの名前です。すべてのディレクティブで、fnパラメータの値を指定する必要があります。関数がない場合、命令では何も実行されません。残りのパラメータは、関数で必要とされる引数ですが、これらは関数ごとに異なります。
パラメータには、変数および式への参照を含めることができます。変数には、事前定義された変数、set-variable SAFを使用してリクエスト時に定義された変数、またはserver.xmlファイルで定義された変数を指定できます。「set-variable」を参照してください。server.xmlファイルの変数を定義する方法の詳細は、variableを参照してください。式および変数の詳細は、変数、式、ワイルドカードおよび文字列補間の使用を参照してください。
Oracle Traffic Directorには、obj.confファイルのディレクティブの作成および変更に使用できる組込みSAFのセットが含まれます。これらのSAFの詳細は、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>
「ワイルドカード・パターン」を参照してください。
Clientタグと同様に、これらのタグはObjectタグの内部にのみ出現します。また、これらのタグで式を評価して、含まれている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コードの関数名では、構成ファイルでアンダースコア(_)のかわりにハイフン(-)を使用できます。これは、関数名にのみ適用されます。