変数の設定と使用
コマンドラインインターフェイスを使用して変数を設定するには
-
変数を作成します。
add ns variable <name> -type <string> [-scope global] [-ifFull ( undef | lru )] [-ifValueTooBig ( undef | truncate )] [-ifNoValue ( undef | init )] [-init <string>] [-expires <positive_integer>] [-comment <string>]
add ns variable my_counter –type ulong -init 1
add ns variable user_privilege_map -type map(text(15),text(10),10000)
add ns assignment <name> -variable <expression> [-set <expression> | -add <expression> | -sub <expression> | -append <expression> | -clear] [-comment <string>]
add ns assignment inc_my_counter -variable $my_counter -add 1
add ns assignment set_user_privilege -variable $user_privilege_map[client.ip.src.typecast_text_t] -set sys.http.callout(get_user_privilege)
-
ポリシー内の変数割り当てを呼び出します。マップ変数を操作できる関数は 2 つあります。
-
$name.valueExists(key-expression). キーエクスプレッションで選択されたマップに値がある場合は true を返します。それ以外の場合は false を返します。この関数は、マップエントリが存在する場合は有効期限と LRU 情報を更新しますが、値が存在しない場合は新しいマップエントリを作成しません。
-
$name.valueCount. 変数が現在保持している値の数を返します。これはマップ内のエントリの数です。シングルトン変数の場合、変数が初期化されていない場合は0、そうでない場合は1です。
例:圧縮ポリシーを使用して 「set_user_privilege」という名前のアサインメントを呼び出します。 -
add cmp policy set_user_privilege_pol -rule $user_privilege_map.valueExists(client.ip.src.typecast_text_t).not -resAction set_user_privilege
レスポンス側に HTTP ヘッダーを挿入するユースケース
add ns variable http_req_data -type text(100) -scope transaction
add ns assignment set_http_req_data -variable $http_req_data -set http.req.body(100)
add rewrite action act_ins_header insert_http_header user_name $http_req_data.after_str("user_name").before_str("password")
add rewrite policy pol_set_variable true set_http_req_data
bind rewrite global pol_set_variable 10 -type req_dEFAULT
add rewrite policy pol_ins_header true act_ins_header
bind rewrite global pol_ins_header 10 -type res_dEFAULT
割り当てアクション
GET /client-access?<client-IP-address>の本文に「BLOCK」または「ALLOW」を含む応答が返されます。HTTP コールアウトは、受信リクエストに関連付けられているクライアントの IP アドレスを含むように設定されます。NetScalerアプライアンスがクライアントから要求を受信すると、アプライアンスはコールアウト要求を生成してコールアウトサーバーに送信します。コールアウトサーバーは、ブラックリストに登録されたIPアドレスのデータベースと、クライアントのIPアドレスがデータベースにリストされているかどうかをチェックするHTTPコールアウトエージェントをホストします。HTTP コールアウトエージェントはコールアウトリクエストを受信し、クライアントの IP アドレスがリストされているかどうかを確認し、応答を送信します。レスポンスは、ステータスコード 200、302 で、本文には「ブロック」または「許可」があります。ステータスコードに基づいて、アプライアンスはポリシー評価を実行します。ポリシー評価が true の場合、割り当てアクションがすぐにトリガーされ、アクションによって変数に値が設定されます。アプライアンスはこの変数値を使用して設定し、同じモジュールでの今後のポリシー評価に使用します。
割り当てアクションの設定のユースケース
-
アクセスの決定は別の Web サービスによって行われ、リクエストの本文には BLOCK または ALLOW を含む応答が返されます。
GET /url-service>/url-allowed?<URL path> -
URL へのアクセス決定を格納するマップ変数を設定します。
add ns variable url_list_map -type 'map(text(1000),text(10),10000)' -
HTTP コールアウトを設定して Web サービスにアクセス要求を送信します。
add policy httpCallout url_list_callout -vserver url_vs -returnType TEXT -urlStemExpr '"/url-allowed?" + HTTP.REQ.URL.PATH' -resultExpr 'HTTP.RES.BODY(10)' -
割り当てアクションを設定して、コールアウトを呼び出してアクセス決定を取得し、URL のマップエントリに割り当てます。
add ns assignment client_access_assn -variable '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T]' -set SYS.HTTP_CALLOUT(client_access_callout) -
URL リクエストがブロックされた場合に 403 レスポンスを送信するようにレスポンダーアクションを設定します。
add responder action url_list_block_act respondwith '"HTTP/1.1 403 Forbidden\\r\\n\\r\\n"' -
URL のマップエントリがまだ設定されていない場合は、レスポンダーポリシーを設定して設定します。即時アクション拡張では、このポリシーが評価されるときにマップエントリの値が設定されます。機能強化前は、すべてのレスポンダーポリシーが評価され、別のウェブサービスによって決定されるまで、割り当ては行われませんでした。
add responder policy url_list_assn_pol '!$url_list_map.VALUEEXISTS(HTTP.REQ.URL.PATH)' url_list_assn -
マップエントリの値が BLOCK の場合、URL へのアクセスをブロックするレスポンダーポリシーを設定します。即時アクションの強化により、前のポリシーで設定されたマップエントリをこのポリシーで使用できます。拡張前は、マップエントリはこの時点ではまだ未設定でした。
add responder policy client_access_block_pol '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T] == "BLOCK"' client_access_block_act -
レスポンダーポリシーを仮想サーバーにバインドします。注:ポリシーをグローバルにバインドすることはできません。別の仮想サーバーで HTTP コールアウトを実行したくないからです。
bind lb vserver vs -policyName client_access_assn_pol -priority 10 -gotoPriorityExpression NEXT -type REQUESTbind lb vserver vs -policyName client_access_block_pol -priority 20 -gotoPriorityExpression END -type REQUEST
設定ユーティリティを使用して変数を設定するには
-
「 AppExpert」>「NS 変数」に移動して、変数を作成します。
-
「 AppExpert」>「NS割り当て」に移動して、変数に値を割り当てます。
-
割り当てをアクションとして構成する適切な機能領域に移動します。