プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Traffic Director構成ファイル・リファレンス
12c (12.2.1.3.0)
E90198-02
目次へ移動
目次

前
次

4 obj.confの構文および使用

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のディレクティブ、ObjectClientIfElseIfElseタグの使用方法、obj.confでの制御フロー、およびobj.confを編集する場合の構文ルールについて説明します。

この章の内容は次のとおりです。

リクエスト処理プロセスの概要

Oracle Traffic Directorを最初に起動すると、いくつかの初期化タスクが実行され、クライアント(ブラウザなど)からのHTTPリクエストが待機されます。Oracle Traffic Directorは、リクエストを受信すると、最初に仮想サーバーを選択します。選択された仮想サーバーのobj.confファイルによって、Oracle Traffic Directorのリクエスト処理方法が決定されます。

obj.confファイルには、リクエスト処理プロセスの各ステージでOracle Traffic Directorに実行内容を指示するディレクティブと呼ばれる一連の命令が含まれます。これらのディレクティブは、Objectタグの内部にグループ化されます。各ディレクティブは、1つ以上の引数がある関数を起動します。

各ディレクティブは、リクエスト処理プロセスの特定のステージに適用されます。たとえば、リクエスト処理プロセスの認可ステージで適用されるディレクティブは、AuthTransディレクティブです。

リクエスト処理プロセスのステップ

  1. AuthTrans (認可の変換)

    リクエストで送信された認可情報(名前やパスワードなど)を検証します。

  2. NameTrans (名前の変換)

    論理URIをローカル・ファイル・システム・パスに変換します。

  3. PathCheck (パスのチェック)

    ローカル・ファイル・システム・パスの有効性をチェックし、ファイル・システムでリクエストされているリソースに対するアクセス権限をリクエスタが持っているかどうかをチェックします。

  4. ObjectType (オブジェクト・タイプ)

    Oracle Traffic Directorからオリジン・サーバーへの情報のフローを制御し、オリジン・サーバーの接続属性に対してOracle Traffic Directorを構成します。

  5. Input (入力読取りの準備)

    Serviceステップで読み取られる着信リクエスト・データを処理するフィルタを選択します。

  6. Output (出力送信の準備)

    Serviceステップで生成される発信レスポンス・データを処理するフィルタを選択します。

  7. Route (リクエストのルーティング)

    リクエストをルーティングする場所を選択します。

  8. Service (レスポンスの生成)

    レスポンスを生成してクライアントに返します。

  9. AddLog (ログ・エントリの追加)

    ログ・ファイルにエントリを追加します。

  10. Error (エラー処理)

    クライアントにエラー・メッセージを送信して処理を終了します。このステップは、前のステップでエラーが発生した場合にのみ実行されます。

obj.confのディレクティブ

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のオブジェクト

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の制御フロー」を参照してください。

name属性を使用するオブジェクト

defaultオブジェクトのNameTransディレクティブでname引数が指定されている場合、Oracle Traffic Directorは、defaultオブジェクトの残りのディレクティブを処理する前に、その名前のオブジェクトに含まれるディレクティブを処理します。

ppath属性を使用するオブジェクト

Oracle Traffic DirectorがdefaultオブジェクトのNameTransディレクティブの処理を完了すると、リクエストの論理URLが物理パス名に変換されます。この物理パス名がobj.confファイルの別のオブジェクトのppath属性に一致する場合、Oracle Traffic Directorは、defaultオブジェクトの残りのディレクティブを処理する前に、そのオブジェクトのディレクティブを処理します。

Client、If、ElseIfおよびElseタグの使用

Objectタグ内では、追加タグを使用できます。これらのタグによって、オブジェクト内のディレクティブを起動する場合の柔軟性が向上します。

クライアント

Clientタグによって、一連のディレクティブの実行を、特定のクライアントから受信したリクエストに制限できます。Clientタグ内にリストされたディレクティブは、クライアント・リクエストの情報が、指定されたパラメータ値に一致する場合にのみ実行されます。

表4-1に、Clientタグのパラメータを示します。

表4-1 Clientタグのパラメータ

パラメータ 説明

browser

ブラウザからOracle Traffic Directorに送信されるUser-Agent文字列。

chunked

チャンク・エンコーディングをリクエストするクライアントによって設定されたブール値。

code

HTTPレスポンス・コード。

dns

クライアントのDNS名。

internal

内部で生成されたリクエストを示すブール値。

ip

クライアントのIPアドレス。

keep-alive

クライアントがキープ・アライブ接続をリクエストしたかどうかを示すブール値。

keysize

SSLトランザクションで使用される鍵サイズ。

match

Clientタグの一致モード。有効な値は、allanyおよびnoneです。

method

ブラウザで使用されるHTTPメソッド。

name

前のNameTrans文で指定されているオブジェクトの名前。

odds

囲まれたディレクティブを評価するためのランダム値。値には、パーセントまたは比率を指定できます(20%や1/5など)。

path

リクエストされたリソースに対する物理パス。

ppath

リクエストされたリソースの物理パス。

query

リクエストで送信された問合せ文字列。

reason

HTTPレスポンス・コードのテキスト・バージョン。

restarted

リクエストが再起動されたことを示すブール値。

secret-keysize

SSLトランザクションで使用される秘密鍵サイズ。

security

暗号化されたリクエスト。

type

リクエストされたドキュメントのタイプ(text/htmlimage/gifなど)。

uri

ブラウザからのリクエストのURIセクション。

urlhost

クライアントでリクエストされた仮想サーバーのDNS名。(値は、クライアント・リクエストのHostヘッダーで指定されます。)

variable-headers

クライアントによるリクエストに基づいて、次のように特定のサイトへのアクセスを禁止します。

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>

「ワイルドカード・パターン」を参照してください。

If、ElseIfおよびElse

Clientタグと同様に、これらのタグはObjectタグの内部にのみ出現します。また、これらのタグで式を評価して、含まれている1つ以上のディレクティブを条件付きで実行できます。「If、ElseIfおよびElseタグ」を参照してください。

obj.confの制御フロー

Oracle Traffic Directorでリクエストを処理するには、リクエストを適切な仮想サーバーに転送する必要があります。仮想サーバーの決定後、Oracle Traffic Directorは、指定された仮想サーバーのobj.confファイルを実行します。この項では、Oracle Traffic Directorがobj.conf内で実行するディレクティブを決定する方法について説明します。

AuthTrans

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にダイアログ・ボックスが表示されます。クライアントは、ヘッダーにユーザー名とパスワードを含めてリクエストを再送信します。

NameTrans

Oracle Traffic Directorは、defaultオブジェクトのNameTransディレクティブを実行して、名前付きオブジェクト(ルーティング・ルールを指定するオブジェクトなど)をリクエストされたリソースのURLに関連付けます。

Oracle Traffic Directorは、適用可能なディレクティブを検出するまで、defaultオブジェクトの各NameTransディレクティブを順番に評価します。

Oracle Traffic DirectorはすべてのNameTransディレクティブを実行するとはかぎらないため、ディレクティブの出現順序が重要になります。

Oracle Traffic Directorが他のオブジェクトを処理する方法と条件

NameTransディレクティブを実行した結果、Oracle Traffic Directorが別のオブジェクトのディレクティブの処理を開始することがあります。これは、正常に実行されたNameTransディレクティブによって名前が指定されるか、別のオブジェクトのnameまたはppath属性に一致する部分パスが生成されると発生します。

成功したNameTransディレクティブによってname引数の指定により名前が割り当てられると、Oracle Traffic Directorは、objectタグで定義された名前付きオブジェクトのディレクティブの処理を開始し、その後でリクエスト処理プロセスの残りとしてdefaultオブジェクトのディレクティブを処理します。

PathCheck

NameTransステップでリクエストされたリソースの論理URLを物理パス名に変換した後、Oracle Traffic Directorは、PathCheckディレクティブを実行して、クライアントがリクエストされたリソースにアクセスできるかどうかを検証します。

複数のPathCheckディレクティブが存在する場合、Oracle Traffic Directorは、いずれかのディレクティブによってアクセスが拒否されないかぎり、すべてのディレクティブをその出現順序に従って実行します。アクセスが拒否されると、Oracle Traffic Directorは、Errorセクションのディレクティブに実行を切り替えます。

NameTransディレクティブによって名前が割り当てられているか、別のオブジェクトのnameまたはppath属性に一致する物理パス名が生成された場合、Oracle Traffic Directorは、defaultオブジェクトのディレクティブを適用する前に、まずその一致するオブジェクトのPathCheckディレクティブを適用します。

ObjectType

PathCheckディレクティブによってアクセスが承認されると、Oracle Traffic Directorは、次にObjectTypeディレクティブを実行してリクエストのMIMEタイプを決定します。MIMEタイプには、typeencodingおよびlanguageという3つの属性があります。Oracle Traffic Directorがクライアントにレスポンスを送信すると、typelanguageおよび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

Inputディレクティブは、Serviceステップで読み取られる着信リクエスト・データを処理するフィルタを選択します。Inputディレクティブは、Oracle Traffic Directorまたはプラグインがクライアントからエンティティ本文データを最初に読み取ろうとしたときに起動されます。リクエスト処理プロセスのInputステージでinsert-filter SAFを起動することで、着信データを処理するNSAPIフィルタを追加できます。NSAPIフィルタによって、ある関数を使用して、別の関数に提供されるコンテンツまたは別の関数で生成されるコンテンツをインターセプトして潜在的に変更できます。Inputディレクティブは、1つのリクエストごとに1回実行されます。

2つ以上のフィルタをフィルタ・スタックの同じ場所に定義する場合、obj.confInput fn="insert-filter"ディレクティブとOutput fn="insert-filter"ディレクティブの順序が重要になります。後に挿入されたフィルタは、先に挿入されたフィルタより上に出現します。

Output

Outputディレクティブは、Serviceステップで生成される発信レスポンス・データを処理するフィルタを選択します。Outputディレクティブによって、insert-filter SAFを起動して、発信データを処理するNSAPIフィルタをインストールできます。NSAPIフィルタによって、ある関数を使用して、別の関数に提供されるコンテンツまたは別の関数で生成されるコンテンツをインターセプトして潜在的に変更できます。Outputディレクティブは、Oracle Traffic Directorまたはプラグインがクライアントからエンティティ本文データを最初に書き込もうとしたときに実行されます。Outputディレクティブは、1つのリクエストごとに1回実行されます。

2つ以上のフィルタをフィルタ・スタックの同じ場所に定義する場合、obj.confInput fn="insert-filter"ディレクティブとOutput fn="insert-filter"ディレクティブの順序が重要になります。後に挿入されたフィルタは、先に挿入されたフィルタより上に出現します。

Route

Serviceディレクティブで、HTTPリクエストを別のサーバーに送信する必要がある場合、Oracle Traffic Directorは、Routeディレクティブを実行してリクエストのルーティング方法を決定します。リクエストのルーティングには、リクエストにサービスを提供するOracle Traffic Directorを選択することや、リクエストを送信するためのプロキシを選択することが含まれます。

Service

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ディレクティブは実行されません。

AddLog

Oracle Traffic Directorは、レスポンスを生成してクライアントに送信した後、AddLogディレクティブを実行してエントリをログ・ファイルに追加します。すべてのAddLogディレクティブが実行されます。Oracle Traffic Directorは、複数のログ・ファイルにエントリを追加します。

Error

リクエストされたリソースに対するアクセスが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は、元のリクエストの処理中に、このファイルを取得するための内部リクエストを作成します。

URI変換

Oracle Traffic Directorは、AuthTransおよびNameTransディレクティブを実行して、新規リクエストを起動することなくURIを物理パス名に変換できます。

obj.confの編集

このファイルを変更する場合は慎重に作業してください。単純な間違いでも、Oracle Traffic Directorの起動や動作に障害が発生する可能性があります。

ディレクティブの順序

Oracle Traffic Directorは、obj.confでの出現順序に従って各ディレクティブを実行するため、ディレクティブの順序は重要です。あるディレクティブの結果は、別のディレクティブの実行に影響します。

PathCheckディレクティブの場合、Oracle Traffic DirectorはすべてのPathCheckディレクティブを実行するため、PathCheckセクション内の順序は重要ではありません。ただし、ObjectTypeディレクティブで属性値を設定する場合、他のObjectTypeディレクティブではその値を変更できないため、ObjectTypeセクション内の順序は非常に重要です。

同様に、Serviceセクション内のディレクティブの順序も非常に重要です。Oracle Traffic Directorは、現在のリクエストに一致する最初のServiceディレクティブを実行し、その他のディレクティブは実行しません。

パラメータ

パラメータの数と名前は、各関数に応じて異なります。行におけるパラメータの順序は、重要ではありません。

大文字と小文字の区別

関数名、パラメータ名、パラメータ値、パス名など、obj.confファイル内の項目の大文字と小文字は区別されます。

セパレータ

C言語の関数名は、文字、数字およびアンダースコアで構成されます。Cコードの関数名では、構成ファイルでアンダースコア(_)のかわりにハイフン(-)を使用できます。これは、関数名にのみ適用されます。

引用符

引用符(")は、文字列内に空白がある場合に、値の文字列の前後にのみ必要です。それ以外の場合はオプションです。各開始引用符は、終了引用符に一致している必要があります。

スペース

  • 空白は、前の行から続く場合を除き、行頭では使用できません。

  • 空白は、名前と値を区切る等号(=)の前後では使用できません。

  • 空白は、行末または空の行では使用できません。

行の継続

長い行を次の行に続けるには、次の行を空白またはタブ文字で始めます。

パス名

パス名では、常にスラッシュ(/)を使用します。バックスラッシュは、次の文字をエスケープします。

コメント

コメントは、ポンド記号(#)で始めます。obj.confファイルに手動でコメントを追加する場合、管理コンソールまたはCLIを使用してサーバーに変更を加えます。コメントは、obj.confファイルが更新されると上書きされます。