ADC

Ejemplos resumidos de directivas y expresiones de directivas avanzadas

En la tabla siguiente se proporcionan ejemplos de expresiones de directivas avanzadas que puede utilizar como base para sus propias expresiones de directiva avanzadas.

Tabla 1. Ejemplos de expresiones de directivas avanzadas

Tipo de expresión Expresiones de ejemplo
Observe el método utilizado en la solicitud HTTP. http.req.method.eq(post) http.req.method.eq(get)
Compruebe el valor del encabezado Cache-Control o Pragma en una solicitud HTTP (req) o respuesta (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")
Compruebe la presencia de un encabezado en una solicitud (req) o respuesta (res). http.req.header("myHeader").exists http.res.header("myHeader").exists
Busque un tipo de archivo concreto en una solicitud HTTP basada en la extensión del archivo. 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/")
Busque cualquier cosa que no sea un tipo de archivo concreto en una solicitud HTTP. http.req.url.contains(".gif").not; http.req.url.contains(".jpeg").not
Compruebe el tipo de archivo que se envía en una respuesta HTTP según el encabezado Content-Type. 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/")
Compruebe si esta respuesta contiene un encabezado de caducidad. http.res.header("Expires").exists
Compruebe si hay un encabezado Set-Cookie en una respuesta. http.res.header("Set-Cookie").exists
Compruebe el agente que envió la respuesta. http.res.header("User-Agent").contains("Mozilla/4.7") http.res.header("User-Agent").contains("MSIE")
Compruebe si los primeros 1024 bytes del cuerpo de una solicitud comienzan con la cadena “algún texto”. http.req.body(1024).contains("some text")

En la tabla siguiente se muestran ejemplos de configuraciones de directivas y enlaces para funciones de uso común.

Tabla 2. Ejemplos de directivas avanzadas, expresiones y directivas

Propósito Ejemplo
Utilice la función de reescritura para reemplazar las apariciones dehttp:// with https://en el铜erpo de una respuesta HTTP. 添加修改操作httpRewriteAction replace_all http.res.body(50000) "\"https://\"" -search http:// add rewrite policy demo_rep34312 "http.res.body(50000).contains(\"http://\")" httpRewriteAction
Reemplace todas las apariciones de “abcd” por “1234” en los primeros 1000 bytes del cuerpo HTTP. 添加修改操作abcdTo1234Action replace_all "http.req.body(1000)" "\"1234\"" -search abcd add rewrite policy abcdTo1234Policy "http.req.body(1000).contains(\"abcd\")" abcdTo1234Action bind rewrite global abcdTo1234Policy 100 END -type REQ_OVERRIDE
Rebaja la versión HTTP a 1.0 para evitar que el servidor separe las respuestas HTTP. 添加修改操作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
Elimine las referencias al protocolo HTTP o HTTPS en todas las respuestas, de modo que si la conexión del usuario es HTTP, el enlace se abra mediante HTTP y, si la conexión del usuario es HTTPS, el enlace se abra mediante HTTPS. 添加修改操作remove_http_https replace_all "http.res.body(1000000).set_text_mode(ignorecase)" "\"//\"" -search "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
Reescribe instancias de http: a https: en todas las URL. add responder action httpToHttpsAction redirect "\"https://\" + http.req.hostname + http.req.url" add responder policy httpToHttpsPolicy "!CLIENT.SSL.IS_SSL" httpToHttpsAction bind responder global httpToHttpsPolicy 1 END -type OVERRIDE
Modifique una URL para redirigir de la URL A a la URL B. En este ejemplo, se anexa “file5.html” a la ruta de acceso. add responder action appendFile5Action redirect \"http://\" + http.req.hostname + http.req.url + \"/file5.html\"" add responder policy appendFile5Policy "http.req.url.eq(\"/testsite\")" appendFile5Action bind responder global appendFile5Policy 1 END -type OVERRIDE
Redirige una URL externa a una URL interna. 添加修改操作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
Redirigir las solicitudes a www.example.com que tengan una cadena de consulta a www.webn.example.com. El valor n se deriva de un parámetro de servidor de la cadena de consulta, por ejemplo, server=5. 添加修改操作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#
Limita el número de solicitudes por segundo de una URL. 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
Compruebe la dirección IP del cliente pero pase la solicitud sin modificar la solicitud. 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
Elimina los encabezados antiguos de una solicitud e inserta un encabezado NS-Client. 添加修改操作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
Quite los encabezados antiguos de una solicitud, inserte un encabezado NS-Client y, a continuación, modifique la acción “insertar encabezado” para que el valor del encabezado insertado contenga los valores IP del cliente de los encabezados antiguos y la dirección IP de conexión del dispositivo NetScaler. Tenga en cuenta que este ejemplo repite el ejemplo anterior, con la excepción de la acción de reescritura final del conjunto. `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’
Ejemplos resumidos de directivas y expresiones de directivas avanzadas

En este artículo