高度なAccess Gatewayポリシーを開発する
高度なポリシーは、1つ以上のステートメントで構成されます。ポリシーステートメントは:
- 指定した順序で実行します。
- セミコロンで終わります。
- 変数を定義できます。
- Access GatewayとHTTPセッション変数の参照と更新ができます。
- if/then形式の条件構文をサポートします。
- ステートメントをブロックにグループ化することをサポートします。
- 短絡をサポートし、その時点で実行を停止させます。
- HTTPステータスコードの変更および返しをサポートします。
- URLの書き換えをサポートします。
高度なポリシーを作成する
- Access Gateway管理者UIコンソールにサインインします。
- アプリケーションタブをクリックします。
- [Edit(編集)]をクリックします。
- [Policies(ポリシー)]をクリックします。
- [Edit(編集)]をクリックします。
- [Advanced(詳細設定)]オプションを展開します。
- [Custom Configuration(カスタム構成)]ボックスに高度なポリシーを入力します。例:set $TEST "some value"; proxy_set_header header_test $TEST;
- [Not Validated(未検証)]をクリックしてカスタム構成の構文を検証します。検証が問題なく終了すると、ボタンは[Validated(検証済み)]に変わります。変わらない場合、構文エラーを修正して再検証します。
以前に有効であったポリシーカスタム構成の構文エラーが検出されない場合があります。ポリシーコードの検証のみに使用される新規ポリシーを使って更新済みの構成ステートメントを検証します。検証後、このポリシーを直ちに破棄してください。
- [Okay(OK)]をクリックしてカスタム構成を保存します。
- [Done(完了)]をクリックしてアプリケーション編集セッションを完了します。
カスタム構成
カスタム構成は、コメント、ステートメント、セッションデータ、テスト、テストのフォローアップアクションから構成されます。カスタム構成は次の構成をサポートします。
コメント
コメントを作成するには、ステートメントの冒頭に番号記号(#)を入力します。
#これはコメントです。 #空白文字が先行するコメント。 set $TEST "some value"; #これも有効なコメントです。埋め込み変数または事前定義変数
埋め込み変数には、すべてのHTTPセッション、クッキー、クエリ、リクエストヘッダーフィールド、50を超える名前付き変数が含まれます。これらの変数に名前を付けてアクセスする場合は、プレフィックスを使用するのが一般的です。次の手順を参照してください: 埋め込み変数」を参照してください。一般的なプレフィックスには次の内容が含まれます。
プレフィックス |
用途 |
例 |
---|---|---|
[arg_] |
クエリ引数へのアクセス |
arg_name、nameはクエリ変数を表します。 |
[cookie_] | cookieフィールドへのアクセス | cookie_name、nameは任意のcookieフィールドを表します。 |
[http_] | 任意のヘッダーフィールドへのアクセス | http_email、emailはヘッダー内のフィールドを表します。 |
[sent_http_] | レスポンスヘッダーフィールド | sent_http_email、emailはレスポンスヘッダー内のフィールドを表します。 |
ユーザー変数
カスタム構成に変数を定義して、割り当てや条件ステートメントで使用できます。
形式:
set $variablename value;例:
#create a variable TEST, containing the value "test value" set $TEST "test value";条件
条件ステートメントでは、変数の状態に応じてコードを実行するかどうかを選択できます。ifステートメントに関する詳細については、「ifステートメント」を参照してください。
形式:
if (condition) { statement1; statement2; . . . statementn; }条件の例には次の項目が含まれます:
- 変数名。空または[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ディレクティブは追加のステートメントの実行を停止します。この例は、breakディレクティブの使用方法を示しています。
if ($arg_test = "demo") { set $policy_type "NO_AUTH"; break; } #Statements after break aren't executed if the condition is trueリターンコード
このコマンドは処理を停止し、指定したコードをクライアントに返します。
形式:
return numericReturnCode [optional url];例:
#Stop executing and return a 404 return 404;ディレクティブ
このコマンドは、プログラミング言語の関数呼び出しと同様に、カスタム構成からディレクティブを呼び出せます。ディレクティブはパラメーターの場合があります。次の手順を参照してください: すべてのNGNIXディレクティブのアルファベット順のリスト
形式:
directive_name [parameter1 [parameter2 [parametern]]];カスタム構成はロケーションコンテキストを指定するディレクティブのみをサポートします。
例:
ディレクティブ |
説明 |
形式 |
例 |
---|---|---|---|
プロキシ非表示ヘッダー | デフォルトでは、特定のヘッダーフィールドは非表示です。proxy_hide_headerフィールドディレクティブを使用して、他のヘッダーを非表示にすることができます。値には、テキスト、変数、それらの組み合わせが含まれます。 | proxy_hide_header field; | proxy_hide_header secondaryEmailAddress; |
プロキシ設定ヘッダー | ディレクティブを使用することで、リクエストヘッダーにフィールドを再定義または追加できます。 | proxy_set_header field value; | proxy_set_header Host $proxy_host; |
プロキシリダイレクト | 変更する値をプロキシサーバーレスポンスのLocation(ロケーション)およびRefresh(更新)ヘッダーフィールドに指定します。 | proxy_redirect redirect replacement; | proxy_redirect http://general.domain.tbd/abc http://abc.domain.tld; |