ADC

デフォルトの構文式とポリシーの概要例

次の表に、独自の既定の構文式の基礎として使用できる既定の構文式の例を示します。

表1. デフォルトの構文式の例

式タイプ サンプル式
HTTPリクエストで使用されるメソッドを見てください。 http.req.method.eq(post) http.req.method.eq(get)
HTTP要求(req)または応答(res)のキャッシュコントロールまたはプラグマヘッダ値を確認します。 http.req.header("Cache-Control").contains("no-store") http.req.header("Cache-Control").contains("no-cache") http.req.header("Pragma").contains("no-cache") http.res.header("Cache-Control").contains("private") http.res.header("Cache-Control").contains("public") http.res.header("Cache-Control").contains("must-revalidate")http.res.header("Cache-Control").contains ("proxy-revalidate") http.res.header("Cache-Control").contains("max-age")
リクエスト(req)またはレスポンス(res)にヘッダーの存在を確認します。 http.req.header("myHeader").exists http.res.header("myHeader").exists
ファイル拡張子に基づいて、HTTP リクエスト内の特定のファイルの種類を探します。 http.req.url.contains(".html") http.req.url.contains(".cgi")http.req.url.contains(".asp") http.req.url.contains(".exe") http.req.url.contains(".cfm") http.req.url.contains(".ex") http.req.url.contains(".shtml") http.req.url.contains(".htx") http.req.url.contains("/cgi-bin/") http.req.url.contains("/exec/") http.req.url.contains("/bin/")
HTTP リクエストで特定のファイルの種類以外のものを探します。 http.req.url.contains(".gif").not; http.req.url.contains(".jpeg").not
Content-Type ヘッダーに基づいて、HTTP 応答で送信されるファイルの種類を確認します。 http.res.header("Content-Type").contains("text") http.res.header("Content-Type").contains "application/msword") http.res.header("Content-Type").contains("vnd.ms-excel") http.res.header("Content-Type").contains("application/vnd.ms-powerpoint"); http.res.header("Content-Type").contains("text/css"); http.res.header("Content-Type").contains("text/xml"); http.res.header("Content-Type").contains("image/")
この応答に有効期限ヘッダーが含まれているかどうかを確認します。 http.res.header("Expires").exists
レスポンスで Set-Cookie ヘッダーを確認します。 http.res.header("Set-Cookie").exists
応答を送信したエージェントを確認します。 http.res.header("User-Agent").contains("Mozilla/4.7") http.res.header("User-Agent").contains("MSIE")
リクエストの本文の最初の 1024 バイトが文字列「some text」で始まるかどうかを確認します。 http.req.body(1024).contains("some text")

次の表に、一般的に使用される関数のポリシー設定とバインディングの例を示します。

表2. デフォルトの構文式とポリシーの例

目的
書き換え機能を使用して、HTTP 応答の本文内http:// with https://の出現を置き換えます。 add rewrite action httpRewriteAction replace_all http.res.body(50000) "\"https://\"" -pattern http:// add rewrite policy demo_rep34312 "http.res.body(50000).contains(\"http://\")" httpRewriteAction
HTTP 本体の最初の 1000 バイトで「abcd」のすべての出現を「1234」に置き換えます。 add rewrite action abcdTo1234Action replace_all "http.req.body(1000)" "\"1234\"" -pattern abcd add rewrite policy abcdTo1234Policy "http.req.body(1000).contains(\"abcd\")" abcdTo1234Action bind rewrite global abcdTo1234Policy 100 END -type REQ_OVERRIDE
HTTP バージョンを 1.0 にダウングレードして、サーバが HTTP 応答をチャンクしないようにします。 add rewrite action downgradeTo1.0Action replace http.req.version.minor "\"0\"" add rewrite policy downgradeTo1.0Policy "http.req.version.minor.eq(1)" downgradeTo1.0Action bind lb vserver myLBVserver -policyName downgradeTo1.0Policy -priority 100 -gotoPriorityExpression NEXT -type REQUEST
すべての応答で HTTP または HTTPS プロトコルへの参照を削除します。これにより、ユーザーの接続が HTTP の場合は HTTP を使用してリンクが開かれ、ユーザーの接続が HTTPS の場合は HTTPS を使用してリンクが開かれます。 add rewrite action remove_http_https replace_all "http.res.body(1000000).set_text_mode(ignorecase)" "\"//\"" -pattern "re~https?://|HTTPS?://~" add rewrite policy remove_http_https true remove_http_https bind lb vserver test_vsvr -policyName remove_http_https -priority 20 -gotoPriorityExpression NEXT -type RESPONSE
すべての URL で http: のインスタンスを https: に書き換えます。 add responder action httpToHttpsAction redirect "\"https://\" + http.req.hostname + http.req.url" -bypassSafetyCheck YES add responder policy httpToHttpsPolicy "!CLIENT.SSL.IS_SSL" httpToHttpsAction bind responder global httpToHttpsPolicy 1 END -type OVERRIDE
URL A から URL B にリダイレクトするように URL を変更します。この例では、パスに「file5.html」が追加されます。 add responder action appendFile5Action redirect \"http://\" + http.req.hostname + http.req.url + \"/file5.html\"" -bypassSafetyCheck YES add responder policy appendFile5Policy "http.req.url.eq(\"/testsite\")" appendFile5Action bind responder global appendFile5Policy 1 END -type OVERRIDE
外部 URL を内部 URL にリダイレクトします。 add rewrite action act_external_to_internal REPLACE 'http.req.hostname.server' '"www.my.host.com"' add rewrite policy pol_external_to_internal 'http.req.hostname.server.eq("www.external.host.com")' act_external_to_internal bind rewrite global pol_external_to_internal 100 END -type REQ_OVERRIDE
クエリ文字列を持つリクエストを www.Webn.example.com にリダイレクトします。値 n は、クエリ文字列のサーバーパラメータ (server=5 など) から派生します。 add rewrite action act_redirect_query REPLACE q#http.req.header("Host").before_str(".example.com")' '"Web" + http.req.url.query.value("server")# add rewrite policy pol_redirect_query q#http.req.header("Host").eq("www.example.com") && http.req.url.contains("?")' act_redirect_query#
URLからの1秒あたりのリクエスト数を制限します。 add ns limitSelector ip_limit_selector http.req.url "client.ip.src" add ns limitIdentifier ip_limit_identifier -threshold 4 -timeSlice 3600 -mode request_rate -limitType smooth -selectorName ip_limit_selector add responder action my_Web_site_redirect_action redirect "\"http://www.mycompany.com/\"" add responder policy ip_limit_responder_policy "http.req.url.contains(\"myasp.asp\") && sys.check_limit (\"ip_limit_identifier\")" my_Web_site_redirect_action bind responder global ip_limit_responder_policy 100 END -type default
クライアントの IP アドレスを確認しますが、要求を変更せずに要求を渡します。 add rewrite policy check_client_ip_policy 'HTTP.REQ.HEADER ("x-forwarded-for").EXISTS HTTP.REQ.HEADER ("client-ip").EXISTS' NOREWRITE bind rewrite global check_client_ip_policy 100 END
リクエストから古いヘッダーを削除し、NSクライアントヘッダーを挿入します。 add rewrite action del_x_forwarded_for delete_http_header x-forwarded-for add rewrite action del_client_ip delete_http_header client-ip add rewrite policy check_x_forwarded_for_policy 'HTTP.REQ.HEADER("x-forwarded-for").EXISTS' del_x_forwarded_for add rewrite policy check_client_ip_policy 'HTTP.REQ.HEADER("client-ip").EXISTS' del_client_ip add rewrite action insert_ns_client_header insert_http_header NS-Client 'CLIENT.IP.SRC' add rewrite policy insert_ns_client_policy 'HTTP.REQ.HEADER("x-forwarded-for").EXISTS HTTP.REQ.HEADER("client-ip").EXISTS' insert_ns_client_header bind rewrite global check_x_forwarded_for_policy 100 200 bind rewrite global check_client_ip_policy 200 300 bind rewrite global insert_ns_client_policy 300 END
リクエストから古いヘッダーを削除し、NSクライアントヘッダーを挿入してから、挿入されたヘッダーの値に古いヘッダーとCitrix ADCアプライアンスの接続IPアドレスが含まれるように、「ヘッダーの挿入」アクションを変更します。この例では、最後のセット書き換えアクションを除いて、前の例を繰り返していることに注意してください。 add rewrite action del_x_forwarded_for delete_http_header x-forwarded-for add rewrite action del_client_ip delete_http_header client-ip add rewrite policy check_x_forwarded_for_policy 'HTTP.REQ.HEADER("x-forwarded-for").EXISTS' del_x_forwarded_for add rewrite policy check_client_ip_policy 'HTTP.REQ.HEADER("client-ip").EXISTS' del_client_ip add rewrite action insert_ns_client_header insert_http_header NS-Client 'CLIENT.IP.SRC' add rewrite policy insert_ns_client_policy 'HTTP.REQ.HEADER("x-forwarded-for").EXISTS HTTP.REQ.HEADER("client-ip").EXISTS' insert_ns_client_header bind rewrite global check_x_forwarded_for_policy 100 200 bind rewrite global check_client_ip_policy 200 300 bind rewrite global insert_ns_client_policy 300 END set rewrite action insert_ns_client_header -stringBuilderExpr 'HTTP.REQ.HEADER("x-forwarded-for").VALUE(0) + " " + HTTP.REQ.HEADER("client-ip").VALUE(0) + " " + CLIENT.IP.SRC' -bypassSafetyCheck YES
デフォルトの構文式とポリシーの概要例

この記事の概要