Citrix ADC

Exemples récapitulatifs d’expressions de stratégie et de stratégies avancées

Le tableau suivant fournit des exemples d’expressions de stratégie avancées que vous pouvez utiliser comme base pour vos propres expressions de stratégie avancée.

Tableau 1. Exemples d’expressions de stratégie avancées

Type d’expression Exemples d’expressions
Examinez la méthode utilisée dans la requête HTTP. http.req.method.eq(post) http.req.method.eq(get)
Vérifiez la valeur de l’en-tête Cache-Control ou Pragma dans une requête HTTP (req) ou une réponse (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")
Vérifiez la présence d’un en-tête dans une requête (req) ou une réponse (res). http.req.header("myHeader").exists http.res.header("myHeader").exists
Recherchez un type de fichier particulier dans une requête HTTP en fonction de l’extension de fichier. 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/")
Recherchez tout élément autre qu’un type de fichier particulier dans une requête HTTP. http.req.url.contains(".gif").not; http.req.url.contains(".jpeg").not
Vérifiez le type de fichier envoyé dans une réponse HTTP en fonction de l’en-tête 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/")
Vérifiez si cette réponse contient un en-tête d’expiration. http.res.header("Expires").exists
Recherchez un en-tête Set-Cookie dans une réponse. http.res.header("Set-Cookie").exists
Vérifiez l’agent qui a envoyé la réponse. http.res.header("User-Agent").contains("Mozilla/4.7") http.res.header("User-Agent").contains("MSIE")
Vérifiez si les 1024 premiers octets du corps d’une requête commencent par la chaîne « du texte ». http.req.body(1024).contains("some text")

Le tableau suivant présente des exemples de configurations de stratégie et de liaisons pour les fonctions couramment utilisées.

Tableau 2. Exemples d’expressions et de stratégies avancées

Objectif Exemple
Utilisez la fonction de réécriture pour remplacer les occurrences de http:// with https:// dans le corps d’une réponse HTTP. add rewrite action httpRewriteAction replace_all http.res.body(50000) "\"https://\"" -search http:// add rewrite policy demo_rep34312 "http.res.body(50000).contains(\"http://\")" httpRewriteAction
Remplacez toutes les occurrences de « abcd » par « 1234 » dans les 1000 premiers octets du corps HTTP. add rewrite action 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
Réduisez la version HTTP vers la version 1.0 pour empêcher le serveur de répartir les réponses 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
Supprimez les références au protocole HTTP ou HTTPS dans toutes les réponses, de sorte que si la connexion de l’utilisateur est HTTP, le lien soit ouvert à l’aide de HTTP, et si la connexion de l’utilisateur est HTTPS, le lien soit ouvert à l’aide du protocole HTTPS. add rewrite action 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
Réécrivez les instances de http : en https : dans toutes les 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
Modifiez une URL pour rediriger de l’URL A vers l’URL B. Dans cet exemple, « file5.html » est ajouté au chemin d’accès. 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
Redirigez une URL externe vers une URL interne. 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
Redirigez les demandes vers www.example.com qui ont une chaîne de requête vers www.webn.example.com. La valeur n est dérivée d’un paramètre de serveur dans la chaîne de requête, par exemple, 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#
Limitez le nombre de demandes par seconde à partir d’une 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
Vérifiez l’adresse IP du client, mais transmettez la demande sans modifier la demande. 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
Supprimez les anciens en-têtes d’une demande et insérez un en-tête NS-Client. 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
Supprimez les anciens en-têtes d’une demande, insérez un en-tête NS-Client, puis modifiez l’action « insérer un en-tête » afin que la valeur de l’en-tête inséré contienne les valeurs IP du client des anciens en-têtes et de l’adresse IP de connexion de l’appliance Citrix ADC. Notez que cet exemple répète l’exemple précédent, à l’exception de l’action de réécriture du jeu final. `ajouter une action de réécriture del_x_forwarded_for delete_http_header x-forwarded-for ajouter une action de réécriture del_client_ip delete_http_header client-ip ajouter une politique de réécriture check_x_forwarded_for_policy ‘HTTP.REQ.HEADER (« x-forwarded-for ») .EXISTS’ del_x_forwarded_for ajouter une politique de réécriture check_client_ip_policy ‘HTTP.REQ. HEADER (« client-ip ») .EXISTS ‘del_client_ip ajouter l’action de réécriture insert_ns_client_header insert_http_header NS-Client ‘CLIENT.IP.SRC’ ajouter la stratégie de réécriture insert_ns_client_policy ‘HTTP.REQ.HEADER (« x-forwarded-for ») .EXISTS HTTP.REQ.HEADER (« client-ip ») .EXISTS’ insert_ns_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 FIN définir l’action de réécriture insert_ns_client_header -StringBuilderExpr ‘HTTP.REQ.HEADER (« x-forwarded-for ») .VALUE (0) + “” + HTTP.REQ. EN-TÊTE (« client-ip ») .VALUE (0) + “” + CLIENT.IP.SRC’
Exemples récapitulatifs d’expressions de stratégie et de stratégies avancées