高度なAccess Gatewayポリシーを作成する

高度なポリシーを記述する

高度なポリシーには1つ以上のステートメントが含まれます。ステートメントは:

  • セミコロンを使用して終了します。
  • 変数を定義できます。
  • Access GatewayおよびHTTP セッション変数の読み取りと書き込みができます。
  • If/Then形式の条件付きコンストラクトをサポートします。
  • ステートメントのブロックグループ化をサポートします。
  • ショートサーキットをサポートし、その時点で実行を停止します。
  • HTTPステータスコードの変更およびリターンをサポートします。
  • URL の書き換えをサポートします。

高度なポリシーを定義する

高度なポリシーを定義するには:

  1. Access Gateway Admin UIコンソールにサインインします。
  2. [Applications(アプリケーション)]タブをクリックします。
  3. [Edit(編集)]をクリックします。

    アップデートの際に開くアプリケーションの横にある鉛筆アイコンをクリックします。
  4. [Policies(ポリシー)]を選択します。
    ポリシータブを選択します。
  5. [Edit(編集)]をクリックします。
    鉛筆アイコンをクリックしてポリシーを開き、編集します。
  6. [Advanced(詳細設定)]を展開します。
  7. [Custom Configuration(カスタム構成)]ボックスに、高度なポリシーを入力します。
    例:
    set $TEST "some value";
    proxy_set_header header_test $TEST;
  8. [Not Validated(未検証)] ()をクリックしてカスタム構成の構文を検証します。検証が問題なく終了したら、ボタンが[Validated(検証済み)]に変わります。変わらない場合、構文エラーを修正して再検証します。

  9. [Okay(OK)]をクリックしてカスタム構成を保存します。
  10. [Done(完了)]をクリックしてアプリケーション編集セッションを完了します。

カスタム構成

カスタム構成はコメント、1つ以上のステートメント、セッションデータ、実行する様々なテスト、およびそれらのテストに対するフォローアップアクションの実行から成ります。以下のコンストラクトをサポートします。

コメント

コメントは常に#から始まります。

#This is a comment
#This comment, preceded by a space
set $TEST "some value"; #this is also a valid comment

埋め込みまたは事前定義された変数

埋め込み変数にはすべてのHTTP セッション、Cookie、クエリおよびリクエストヘッダーフィールドと、50以上の名前付き変数が含まれます。通常、これらの変数はプレフィックスを使用してアクセスされます。一般的なプレフィックスを以下に示します。

プレフィックス

用途

arg_

クエリ引数にアクセス

arg_name、ここで、nameはクエリ変数を表します。

cookie_

Cookieフィールドにアクセス

cookie_name、ここで、nameはCookieフィールドを表します。

http_

任意のヘッダーフィールドにアクセス

http_email、ここで、emailはヘッダーのフィールドを表します。
sent_http_

ヘッダーフィールドに応答

sent_http_email、ここで、emailは応答ヘッダーのフィールドを表します。

一部の変数リストには以下が含まれます。

  • $args - リクエスト内のすべての引数。
  • $request_uri - 完全なオリジナルリクエストURI(引数付き)。
  • $uri - リクエスト内のコンテンツURI 。
  • $request_body - リクエストの本文。

埋め込み変数のすべてのリストについては、 「埋め込み変数」を参照してください。

ユーザー変数

カスタム構成内で変数を定義し、それらを割り当てや条件(if)文で使用できます。

一般的な形式:

set $variablename value;

例:

#create a variable TEST, containing the value "test value"
set $TEST "test value";

条件分岐

条件分岐を使用すると、変数の状態に基づいて決定を行い、条件に応じてコードブロックを実行することができます。

一般的な形式:

if (condition) { statement1; statement2; . . . statementn; }

ここで、conditionは:

  • 変数名、空白または0の場合はfalse、それ以外の場合はtrue。
  • =(等しい)および!= (等しくない)演算子を使用した2つの変数間の比較。
  • 変数と正規表現との照合。

例:

# If the query parameter 'test' contains the value 'demo' # then no authorization required.
if ($arg_test = "demo") { set $policy_type "NO_AUTH";}

さらに、breakディレクティブは以降のステートメントの実行を停止します。
例:

 if ($arg_test = "demo") { set $policy_type "NO_AUTH"; break; } #Statements after break not executed if condition is true

if文について詳しくは、if文を参照してください。

リターンコード

処理を停止し、指定されたコードをクライアントに返します。

一般的な形式:

return numericReturnCode [任意のURL];

例:

#Stop executing and return a 404
return 404;

ディレクティブ

ディレクティブとはカスタム構成から呼び出し可能なビルトイン機能一式であり、様々なプログラミング言語で呼び出される機能と似ています。ディレクティブはパラメータを取ることが多いです。

一般的な形式:

directive_name [parameter1 [parameter2 [parametern]]];

参照 すべてのNGNIXディレクティブのリスト(アルファベット順)

情報

メモ

カスタム構成は場所のコンテンツを指定するディレクティブのみをサポートします。
例:
場所をサポートするディレクティブの例。

ディレクティブの例には以下が挙げられます。

プロキシ非表示ヘッダー

デフォルトでは、一部のヘッダーフィールドが非表示です。proxy_hide_headerフィールドディレクティブを使用して、他のヘッダーを隠すことができます。

一般的な形式:

proxy_set_header フィールド値;

値はテキスト、変数、およびその組み合わせを含めることができます。

例:

proxy_set_header Host $proxy_host;
プロキシ設定ヘッダー

リクエストヘッダーを再定義したりフィールドを追加できます。

一般的な形式:

proxy_hide_header フィールド;

例:

proxy_hide_header secondaryEmailAddress;
プロキシリダイレクト

プロキシされたサーバー応答のLocationおよびRefreshヘッダーフィールドで、変更すべき値を指定します。

一般的な形式:

proxy_redirect redirect replacement;

例:

proxy_redirect http://general.domain.tbd/abc http://abc.domain.tld;

次の手順

(missing or bad snippet)