高度なAccess Gatewayポリシーを作成する
高度なポリシーを記述する
高度なポリシーには1つ以上のステートメントが含まれます。ステートメントは:
- セミコロンを使用して終了します。
- 変数を定義できます。
- Access GatewayおよびHTTP セッション変数の読み取りと書き込みができます。
- If/Then形式の条件付きコンストラクトをサポートします。
- ステートメントのブロックグループ化をサポートします。
- ショートサーキットをサポートし、その時点で実行を停止します。
- HTTPステータスコードの変更およびリターンをサポートします。
- URL の書き換えをサポートします。
高度なポリシーを定義する
高度なポリシーを定義するには:
- Access Gateway Admin UIコンソールにサインインします。
- [Applications(アプリケーション)]タブをクリックします。
- [Edit(編集)]をクリックします。
- [Policies(ポリシー)]を選択します。
- [Edit(編集)]をクリックします。
- [Advanced(詳細設定)]を展開します。
- [Custom Configuration(カスタム構成)]ボックスに、高度なポリシーを入力します。
例:
set $TEST "some value";
proxy_set_header header_test $TEST; -
[Not Validated(未検証)] (
)をクリックしてカスタム構成の構文を検証します。検証が問題なく終了したら、ボタンが[Validated(検証済み)]に変わります。変わらない場合、構文エラーを修正して再検証します。
- [Okay(OK)]をクリックしてカスタム構成を保存します。
- [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;