ADC

重写

警告:

使用经典策略的过滤器功能已被弃用,作为替代方法,Citrix建议您将重写和响应程序功能与高级策略基础结构一起使用。

重写是指重写Citrix ADC设备处理的请求或响应中的某些信息。重写可以帮助提供对所请求内容的访问权限,而不会暴露有关网站实际配置的不必要细节。在以下几种情况下,重写功能很有用:

  • 为了提高安全性,Citrix ADC可以将响应正文中的所有http://links重写到https://中。

  • 在SSL卸载部署中,响应中的不安全链接必须转换为安全链接。使用重写选项,您可以将所有重写https://为,http://links以确保Citrix ADC发送到客户端的传出响应具有安全链接。

  • 如果网站必须显示错误页面,则可以显示自定义错误页面,而不是默认的 404 错误页面。例如,如果您显示的是Web页面的主页或站点地图,而非错误页,面访客将停留在站点上,而非离Web站开点。

  • 如果您想启动新网页站点,但使用旧网址,则可以使用“改写”(重写)选项。

  • 当站点中的主题具有复杂的URL时,您可以使用简单易记的URL(也称为“酷URL”)重写它。

  • 可以将默认页面名称附加到Web站点的URL中。例如,如果公司网站的默认页面是http://www.abc.com/index.php,当用户在浏览器的地址栏中键入“abc.com”时,您可以将URL重写为“abc.com/index.php”。

启用重写功能后,Citrix ADC可以修改HTTP请求和响应的标头和正文。

要重写HTTP请求和响应,可以在配置的重写策略中使用协议感知的Citrix ADC策略表达式。管理HTTP请求和响应的虚拟服务器必须为HTTP或SSL类型。在HTTP流量中,您可以执行以下操作:

  • 修改请求的url
  • 添加、修改或删除标题
  • 添加、替换或删除正文或标题中的任何特定字符串。

要重写TCP有效负载,请将有效负载视为原始字节流。管理TCP连接的每个虚拟服务器必须为TCP或ssl_tcp类型。术语TCP重写用于指对不是HTTP数据的TCP负载的重写。在TCP流量中,您可以添加,修改或删除TCP负载的任何部分。

有关使用重写功能的示例,请参阅重写操作和策略示例

重写和响应程序选项之间的比较

重写功能和响应程序功能之间的主要区别如下:

响应程序不能用于响应或基于服务器的表达式。响应程序只能用于以下情况,具体取决于客户端参数:

  • 将HTTP请求重定向到新网站或网页
  • 使用一些自定义响应进行
  • 在请求级别删除或重置连接

如果存在响应程序策略,Citrix ADC将检查来自客户端的请求,根据适用的策略采取措施,将响应发送到客户端,然后关闭与客户端的连接。

如果存在重写策略,Citrix ADC将检查来自客户端的请求或服务器的响应,根据适用的策略采取措施,然后将流量转发到客户端或服务器。

通常,如果希望Citrix ADC根据客户端或基于请求的参数重置或删除连接,建议使用响应程序。使用响应程序重定向流量,或使用自定义消息进行响应。使用重写操作HTTP请求和响应上的数据。

重写的工作原理

重写策略由规则和操作组成。规则确定应用重写的流量,操作确定Citrix ADC要执行的操作。可以定义多个重写策略。对于每个策略,请指定绑定点和优先级。

绑定点是指通信流中的某个点,Citrix ADC在该点检查流量以验证是否可以对其应用任何重写策略。可以将策略绑定到特定的负载平衡或内容交换虚拟服务器,或者如果您希望将策略应用到Citrix ADC处理的整个流量,则可以将策略设为全局策略。这些策略称为全局策略。

除了用户定义的策略外,Citrix ADC还有一些默认策略。不能修改或删除默认策略。

为了评估策略,Citrix ADC请遵循以下顺序:

  • 全局策略
  • 绑定到特定虚拟服务器的策略
  • 默认策略

注意:

Citrix ADC只有在绑定到某个点时才能应用重写策略。

Citrix ADC通过以下步骤实现重写功能:

  • Citrix ADC设备将检查全局策略,然后在各个绑定点检查策略。

  • 如果多个策略绑定到一个绑定点,Citrix ADC将按策略的优先级顺序评估策略。首先对具有最高优先级的策略进行评估。评估每个策略后,如果策略评估为 TRUE,则会添加与执行关联操作的策略相关联的操作。当策略规则中指定的特性与被评估的请求或响应的特性匹配时,就会发生匹配。

  • 对于任何策略,除了操作之外,您还可以指定在评估当前策略后必须评估的策略。此策略称为“去表达式”。对于任何策略,如果指定了去表达式(gotoPriorityExpr), Citrix ADC将评估去表达式策略。它会忽略具有次高优先级的策略。

    可以指定策略的优先级以指示“去表达式”策略;不能使用策略的名称。如果希望Citrix ADC在评估特定策略后停止评估其他策略,则可以将去表达式设置为“结束”。

  • 评估所有策略后或策略将去表达式设置为结束时,Citrix ADC将根据操作列表开始执行操作。

有关配置重写策略的更多信息,请参阅配置重写策略和绑定重写策略,请参阅绑定重写策略

下图说明了使用重写功能时Citrix ADC如何处理请求或响应。

图 1.重写过程

图片

策略评估

首先对具有最高优先级的策略进行评估。Citrix ADC在找到匹配项时不会停止对重写策略的评估。它评估 Citrix ADC 上配置的所有重写策略。

  • 如果策略的评估结果为TRUE,Citrix ADC将遵循以下步骤:
    • 如果策略将“去表达式”设置为“结束”,Citrix ADC将停止评估所有其他策略并开始执行重写。
    • gotoPriorityExpression可以设置为为“下一个”,“结束”,某个整数或“INVOCATION_LIST”。该值确定具有下一个优先级的策略。下表显示了Citrix ADC对表达式的每个值采取的操作。

      表达式的值 操作
      下一个 对具有下一个优先级的策略进行评估。
      结束 停止策略的评估。
      <一个整数> 评估具有指定优先级的策略。
      INVOCATION_LIST 根据调用列表的结果应用Goto NEXT或END。
  • 如果策略的评估结果为FALSE,Citrix ADC将按优先级顺序继续评估。
  • 如果策略的评估结果为未定义(由于错误而无法对收到的流量进行评估),Citrix ADC将执行分配给未定义条件的操作(称为UndeFaction),并停止对策略的进一步评估。

Citrix ADC仅在评估完成后才开始实际的重写。它指的是被评估为真的策略确定的操作列表,然后开始重写。实施列表中的所有操作后,Citrix ADC将根据需要转发流量。

注意:

确保策略不在HTTP标头,正文或TCP有效负载的同一部分指定冲突或重叠操作。发生此类冲突时,Citrix ADC会遇到未定义的情况并中止重写。

重写操作

在Citrix ADC设备上,指定要执行的操作,例如添加,替换或删除正文中的文本,或添加,修改或删除标头,或将TCP有效负载中的任何更改作为重写操作。有关重写操作的更多信息,请参阅配置重写操作。

下表介绍了策略评估为TRUE时Citrix ADC可以执行的步骤。

操作 结果
插入 执行为策略指定的重写操作。
NOREWRITE 请求或响应不会被重写。Citrix ADC在不重写消息的任何部分的情况下转发流量。
重置 连接在TCP级别中止。
下降 消息被丢弃。

注意

对于任何策略,您都可以将欠作用(当策略评估为未定义时采取的操作)配置为NOREWRITE,重置或下降。

要使用 重写功能,请执行以下步骤:

  • 在Citrix ADC上启用该功能。
  • 定义重写操作。
  • 定义重写策略。
  • 将策略绑定到绑定点以使策略生效。

启用重写

如果要重写HTTP或TCP请求或响应,请在Citrix ADC设备上启用重写功能。如果启用此功能,Citrix ADC将根据指定的策略执行重写操作。有关详细信息,请参阅重写的工作原理

使用命令行界面启用重写功能

在命令提示符下,键入以下命令以启用重写功能并验证配置:

  • 启用ns功能重写
  • 显示ns功能

示例:

> enable ns feature REWRITE Done > show ns feature feature Acronym Status ------- ------- ------ 1) Web Logging WL OFF 2) Surge Protection SP ON…1)重写。1) Citrix ADC Push Push OFF Done 

使用GUI启用重写功能

  1. 在导航窗格中,单击”系统,然后单击"设置”。
  2. 在详细信息窗格的模式和功能下,单击配置基本功能
  3. 在“配置基本功能"对话框中,选中"重写"复选框,然后单击"确定”。
  4. 启用/禁用功能对话框中,单击。状态栏中将显示一条消息,指出所选功能已启用。

配置重写操作

警告

自Citrix ADC 12.0版本56.20开始不建议使用重写操作中的模式函数,作为替代方法,Citrix建议您使用搜索重写操作参数。

重写操作表示在将请求或响应发送到服务器或客户端之前对其进行的更改。

表达式定义以下内容:

  • 重写操作类型。

  • 重写操作的位置。

  • 重写操作配置类型。

例如,删除操作只使用目标表达式。取代操作使用目标表达式和表达式来配置替换文本。

启用重写功能后,您需要配置一个或多个操作,除非内置的重写操作足够了。所有内置操作的名称都以字符串ns_cvpn开头,后跟一串字母和下划线字符。内置操作可执行有用且复杂的任务,例如解码无客户端VPN请求的部分或响应或修改JavaScript或XML数据。可以查看、启用和禁用内置操作,但不能修改或删除。

注意:

只能用于HTTP重写的操作类型在"重写操作类型列中标识。

有关详细信息,请参阅类型参数

使用命令行界面创建重写操作

在命令提示符下,键入以下命令以创建重写操作并验证配置:

  • 添加重写动作 [] [-search <表达式>][refineSearch <表达式>][-comment]
  • 显示重写操作

有关详细信息,请参阅重写操作类型及其参数表。

重写功能具有以下内置操作:

  • Norewrite -向用户发送请求或响应而不重写。

  • 重置-重置连接并通知用户的浏览器,以便用户可以重新发送请求。

  • Drop -在不向用户发送响应的情况下丢弃连接。

以下流程类型之一与每个操作隐式关联:

  • 请求-操作适用于请求。

  • 回应-操作适用于响应。

  • 中立-操作同时适用于请求和响应。

名称

用户定义的重写操作的名称。必须以字母,数字或下划线字符(_)开的头,并且必须只包含字母,数字和连字符(-),句点(.)哈希(#),空格(),在(@),等号(=),冒号(:)和下划线字符。可以在添加重写策略后进行更改。

类型参数

类型参数显示用户定义的重写操作的类型。

以下是类型参数的值:

  • 替换 。用字符串构建器表达式替换字符串。

示例

替换http.res.body(100)“new_replaced_data”Done > sh重写动作replace_http_act名称:replace_http_act操作:替换目标:http.res.body(100)值:new_replaced_data Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • REPLACE_ALL -(search) 。在<目标>指定的请求或响应中,将< string_builder_expr1 >所定义的字符串的所有匹配项替换为< string_builder_expr2 >定义的字符串。您可以使用搜索工具查找要替换的字符串。

示例

> add policy patset pat_list_2 Done > bind policy patset pat_list_2 "www.abc.com" Done > bind policy patset pat_list_2 "www.def.com" Done > add rewrite action refineSearch_act_31 replace_all "HTTP.RES.BODY(100000)"”“https://”“搜索”patset(“pat_list_2”)”-refineSearch”扩展(7,0).REGEX_SELECT (re # http://)”Done > sh rewrite action refineSearch_act_31名称:refineSearch_act_31操作:replace_all目标:HTTP.RES.BODY(100000)细化搜索:EXTEND(7,0).REGEX_SELECT(re#http://#)值:"https://"搜索:patset("pat_list_2") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • REPLACE_HTTP_RES < string_builder_expr >。用字符串构建器表达式定义的字符串替换完整的 HTTP 响应。

示例

>添加重写动作replace_http_res_act replace_http_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"' Done > sh重写动作replace_http_res_act名称:replace_http_res_act操作:replace_http_res目标:"HTTP/1.1 200 OK Sending from ADC" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • REPLACE_SIP_RES <目标>。用<目标>指定的字符串替换完整的sip响应。

示例

> add rewrite action replace_sip_res_act replace_sip_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"' Done > sh rewrite action replace_sip_res_act Name: replace_sip_res_act Operation: replace_sip_res Target:"HTTP/1.1 200 OK Sending from ADC" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_HTTP_HEADER 。插入指定的HTTP报头和指定的报头内容。

示例

>添加重写动作ins_cip_header "CIP" "CLIENT.IP. "SRC "做> sh重写行动ins_cip_header名称:ins_cip_header操作:insert_http_header目标:CIP值:CLIENT.IP。SRC Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done 
  • DELETE_HTTP_HEADER <目标>。删除<目标>指定的HTTP标头

示例

> add重写动作del_true_client_ip_header delete_http_header "True-Client-IP" Done > sh重写动作del_true_client_ip_header名称:del_true_client_ip_header操作:delete_http_header目标:True-Client-IP Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CORRUPT_HTTP_HEADER <目标>。用损坏的名称替换<目标>所指定的所有HTTP标头的标头名称,以便接收者无法识别该名称示例:MY_HEADER更改为MHEY_ADER。

示例

> add重写动作corrupt_content_length_hdr corrupt_http_header "Content-Length" Done > sh重写动作corrupt_content_length_hdr名称:corrupt_content_length_hdr操作:corrupt_http_header目标:Content-Length Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_BEFORE 。查找在< string_builder_expr1 >中指定的字符串并在其前面插入< string_builder_expr2 >中的字符串。
添加重写动作insert t_before_ex_act (100)Done > sh重写动作insert_before_ex_act名称:insert_before_ex_act操作:insert_before目标:http.res.body(100)值:"Add this string in the starting" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_BEFORE_ALL -(search) 。在<目标>指定的请求或响应中,查找在< string_builder_expr1 >中指定的字符串的所有匹配项并在其前面插入在< string_builder_expr2 >中指定的字符串。您可以使用搜索工具查找字符串。

示例

> add policy patset pat Done > bind policy patset pat abcd Done > add rewrite action refineSearch_act_1 insert_before_all http.res.body(10)' Target .prefix(10) + "refineSearch_testing" -search patset("pat") - refinesearch_extend ("pat") Done > sh重写动作refineSearch_act_1名称:refineSearch_act_1操作:insert_before_all目标:http.res.body(10)细化搜索:extend(" 10,10 ")值:Target .prefix(10) + "refineSearch_testing"搜索:patset("pat") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_AFTER 。查找在< string_builder_expr1 >中指定的字符串,然后在其后插入在< string_builder_expr2 >中指定的字符串。示例
添加重写动作'"add this string after 100 bytes"' Done > sh rewrite action insert_after_act名称:insert_after_act操作:insert_after目标:http.req.body(100)值:"add this string after 100 bytes" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_AFTER_ALL -(search) 。在<目标>指定的请求或响应中,查找在< string_builder_expr1 >中指定的字符串的所有匹配项并在每个后面插入在< string_builder_expr2 >中指定的字符串。您可以使用搜索工具查找字符串。

示例

>添加重写动作refineSearch_act_2 insert_after_all http.res.body(100)'"refineSearch_testing" -search text("abc") - refinesearchextend (0,10) Done > sh重写动作refineSearch_act_2名称:refineSearch_act_2操作:insert_after_all目标:http.res.body(100)细化搜索:extend(0,10)值:"refineSearch_testing"搜索:text("abc") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • 删除<目标>。查找并删除指定的目标。

示例

> add重写动作delete_ex_act delete http.req.header("HDR") Done > sh重写动作delete_ex_act名称:delete_ex_act操作:delete目标:http.req.header("HDR") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • DELETE_ALL -(search) 。在由<目标>指定的请求或响应中,查找并删除< string_builder_expr >所指定的字符串的所有匹配项。您可以使用搜索工具查找字符串。

示例

>添加重写动作refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)"搜索文本(“Windows桌面”)-refineSearch“扩展(40、40).REGEX_SELECT (re # \ s < AppData > \ *。* \ \年代“\ *”< \ \ / AppData > #)”Done > show REWRITE action refineSearch_act_4名称:refineSearch_act_4操作:delete_all目标:HTTP.RES.BODY(50000)精炼搜索:EXTEND(40,40). regex_select (re#\s ' \* ' . ' \* ' \* ' #)搜索:text("Windows Desktops") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • replace_diameter ter_header_field <目标> <字段值>。在请求或响应中,修改由<目标>指定的标题字段。使用Diameter.req.flags.SET(<标记>)Diameter.req.flags.UNSET <标记>作为stringbuilderexpression以设置或取消设置标志。

示例

> add重写动作replace_直径ter_field_ex_act replace_直径ter_header_field diameter.req.flags diameter.req.flags.set(proxable) Done > sh重写动作replace_直径ter_field_ex_act名称:replace_直径ter_field_ex_act操作:replace_直径ter_header_field目标:直径.req. ex_actflags值:diameter.req.flags.set(proxable) Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done 
  • REPLACE_DNS_HEADER_FIELD <目标>。在请求或响应中修改由<目标>指定的标题字段。

示例

>添加重写动作replace_dns_hdr_act replace_dns_header_field dns.req.header.flags.set(AA) Done > sh重写动作replace_dns_hdr_act名称:replace_dns_hdr_act操作:replace_dns_header_field目标:dns.req.header.flags.set(AA) Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • REPLACE_DNS_ANSWER_SECTION <目标>。替换响应中的DNS答案部分。这仅适用于a和aaaa记录。使用DNS。NEW_RRSET_ANS。NEW_RRSET_AAAA表达式来配置新的答案部分。

示例

> add重写动作replace_dns_ans_act replace_dns_answer_section DNS.NEW_RRSET_A("1.1.1.1", 10) Done > sh重写动作replace_dns_ans_act名称:replace_dns_ans_act操作:replace_dns_answer_section目标:DNS.NEW_RRSET_A("1.1.1.1", 10) Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CLIENTLESS_VPN_DECODE <目标>。以无客户端VPN格式解码目标指定的模式。

示例

> add重写动作cvpn_decode_act_1 clientless_vpn_decode http.req.body(100) Done > sh重写动作cvpn_decode_act_1名称:cvpn_decode_act_1操作:clientless_vpn_decode目标:http.req.body(100) Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CLIENTLESS_VPN_DECODE_ALL <目标>搜索<表达式>。以无客户端VPN格式解码搜索参数指定的所有模式。

示例

> add重写动作act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd") Done > sh重写动作act1名称:act1操作:clientless_vpn_decode_all目标:http.req.body(100)搜索:text("abcd") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CLIENTLESS_VPN_ENCODE <目标>。以无客户端VPN格式对目标指定的模式进行编码。

示例

> add重写动作cvpn_encode_act_1 clientless_vpn_encode http.req.body(100) Done > sh重写动作cvpn_encode_act_1名称:cvpn_encode_act_1操作:clientless_vpn_encode目标:http.req.body(100) Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CLIENTLESS_VPN_ENCODE_ALL <目标>搜索<表达式>。以无客户端VPN格式编码指定的搜索参数的所有模式。

示例

> add重写动作act2 clientless_vpn_encode_all http.req.body(100) -search text("abcd") Done > sh重写动作act2名称:act1操作:clientless_vpn_encode_all目标:http.req.body(100)搜索:text("abcd") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • CORRUPT_SIP_HEADER <目标>。用损坏的名称替换<目标>指定的所有sip报头的标头名称,以便接收方无法识别。

示例

> add重写动作corrupt_sip_hdr_act corrupt_sip_header SIP_HDR Done > sh重写动作corrupt_sip_hdr_act名称:corrupt_sip_hdr_act操作:corrupt_sip_header目标:SIP_HDR Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • INSERT_SIP_HEADER 。插入由< header_string_builder_expr >指定的sip标头和< contents_string_builder_expr >指定的标头内容。

示例

> add重写动作insert_sip_hdr_act insert_sip_header SIP_HDR '"inserting_sip_header"' Done >sh重写动作insert_sip_hdr_act名称:insert_sip_hdr_act操作:insert_sip_header目标:SIP_HDR值:"inserting_sip_header" Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 
  • DELETE_SIP_HEADER <目标>。删除<目标>指定的sip标头

示例

> add重写动作delete_sip_hdr delete_sip_header SIP_HDR Done > sh重写动作delete_sip_hdr名称:delete_sip_hdr操作:delete_sip_header目标:SIP_HDR Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 

目标参数

目标参数是指定要重写请求或响应的哪一部分的表达式。

StringBuilderExpr

StringBuilderExpr是一个表达式,它指定要插入到指定位置的请求或响应中的内容。此表达式替换指定的字符串。

示例 1.使用客户端IP插入HTTP标头

> add重写动作insertact INSERT_HTTP_HEADER "client-IP" CLIENT.IP. src Done > show重写动作insertact名称:insertact操作:INSERT_HTTP_HEADER目的:client-IP取值:CLIENT.IP。SRC BypassSafetyCheck: NO Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done 

示例 2.替换TCP有效负载中的字符串(TCP重写)

> add重写动作client_tcp_payload_replace_all REPLACE_ALL 'client.tcp.payload(1000)' '"new-string"' -search text("old-string") Done > show重写动作client_tcp_payload_replace_all名称:client_tcp_payload_replace_all操作:REPLACE_ALL目标:client.tcp.payload(1000)值:"new-string"搜索:text("old-string") BypassSafetyCheck: NO Hits: 0 Undef Hits: 0 action Reference Count: 0 Done > 

搜索请求或响应的一部分以重写

搜索功能有助于在请求或响应中查找所需模式的所有实例。

需要在以下操作类型中使用搜索功能:

  • 插入T_BEFORE_ALL
  • 插入T_AFTER_ALL
  • REPLACE_ALL
  • 删除E_ALL
  • CLIENTLESS_VPN_ENCODE_ALL
  • CLIENTLESS_VPN_DECODE_ALL

搜索功能不能与以下操作类型一起使用:

  • INSERT_HTTP_HEADER
  • INSERT_BEFORE
  • INSERT_AFTER
  • 取代
  • 删除
  • DELETE_HTTP_HEADER
  • CORRUPT_HTTP_HEADER
  • REPLACE_HTTP_RES
  • CLIENTLESS_VPN_ENCODE
  • CLIENTLESS_VPN_DECODE
  • 插入T_SIP_HEADER
  • DELETE_SIP_HEADER
  • CORRUPT_SIP_HEADER
  • REPLACE_DIAMETER_HEADER_FIELD
  • REPLACE_DNS_ANSWER_SECTION
  • REPLACE_DNS_HEADER_FIELD
  • REPLACE_SIP_RES

支持以下搜索类型:

  • 文本-文字字符串示例፦搜索文本(“你好”)
  • 正则表达式,用于匹配请求或响应中的多个字符串的模式示例:搜索正则表达式(re ~ ^你好* ~)
  • Xpath -用于搜索XML的Xpath表达式。示例:-search xpath(xp%/a/b%)
  • Json -用于搜索Json的xpath表达式。示例:搜索xpath_json (xp % / a / b %) HTML——用于搜索HTML的XPATH表达式示例:搜索xpath_html (xp % / HTML /身体%)Patset——这将搜索绑定到Patset实体的所有模式。示例:-search patset(" patset1 ")
  • 数据集-这将搜索绑定到数据集实体的所有模式。示例:-search dataset(" dataset1 ")
  • AVP-AVP编的号,用于匹配直径/半径消息中的多个avon示例:搜索AVP (999)

优化搜索结果

您可以使用“细化搜索”功能指定用于细化搜索结果的其他条件。只有在使用了搜索功能时,才能使用"优化搜索"功能。完善搜索参数始终以“扩展(m, n)”操作开头,其中“m”指定搜索结果左侧的一些字节,“n”指定搜索结果右侧的几个字节以扩展所选区域。

如果配置的重写操作是:

添加重写动作test_refine_search replace_all http.res.body(10)' " testing_refine_search " ' -search text("abc") -refineSearch extend(1,1) HTTP响应体为abcxxxx456。< !——NeedCopy >

然后,搜索参数查找模式“abc”,并且由于refineSearch参数还配置为在左侧检查额外的1个字节,在匹配模式右侧检查一个额外的一个字节。最终被替换的文本是:abcx。因此,此操作的输出为testing_refine_searchxxx456

示例1:使用insert_before_all操作类型中的细化搜索功能。

> add policy patset pat Done > bind policy patset pat abcd Done > add rewrite action refineSearch_act_1 insert_before_all http.res.body(10)' Target .prefix(10) + "refineSearch_testing" -search patset("pat") - refinesearch_extend ("pat") Done > sh重写动作refineSearch_act_1名称:refineSearch_act_1操作:insert_before_all目标:http.res.body(10)细化搜索:extend(" 10,10 ")值:Target .prefix(10) + "refineSearch_testing"搜索:patset("pat") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 

示例2:使用insert_after_all操作类型中的"细化搜索功能"。

>添加重写动作refineSearch_act_2 insert_after_all http.res.body(100)'"refineSearch_testing" -search text("abc") - refinesearchextend (0,10) Done > sh重写动作refineSearch_act_2名称:refineSearch_act_2操作:insert_after_all目标:http.res.body(100)细化搜索:extend(0,10)值:"refineSearch_testing"搜索:text("abc") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 

示例3:在reace_all操作类型中使用细化搜索功能。

> add policy patset pat_list_2 Done > bind policy patset pat_list_2 "www.abc.com" Done > bind policy patset pat_list_2 "www.def.com" Done > add rewrite action refineSearch_act_31 replace_all "HTTP.RES.BODY(100000)""https://"" -search "patset("pat_list_2")"-refineSearch”扩展(7,0).REGEX_SELECT (re # http://)”Done > sh rewrite action refineSearch_act_31名称:refineSearch_act_31操作:replace_all目标:HTTP.RES.BODY(100000)细化搜索:EXTEND(7,0).REGEX_SELECT(re#http://#)值:"https://"搜索:patset("pat_list_2") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done 

示例4:在deletee_all操作类型中使用"细化搜索功能"。

>添加重写动作refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)"-search text("Windows desktop ") -refineSearch "EXTEND(40,40). regex_select (re#\s*.\* s\*<\\/AppData>#)"> show REWRITE动作refineSearch_act_4名称:refineSearch_act_4操作:delete_all目标:HTTP.RES.BODY(50000)精炼搜索:EXTEND(40,40). regex_select (re#\s*.\*\s\*#)搜索:text("Windows Desktops") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done > 

示例5:在cliless_vpn_encode_all操作类型中使用"细化搜索"功能。

“‘

add重写动作act2 clientless_vpn_encode_all http.req.body(100) -search text(" abcd ") Done sh重写动作act2名称:act1操作:clientless_vpn_encode_all目标:http.req.body(100)搜索:text(" abcd ") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done

“‘

示例6:在cliless_vpn_decode_all操作类型中使用"细化搜索"功能。

> add重写动作act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd") Done > sh重写动作act1名称:act1操作:clientless_vpn_decode_all目标:http.req.body(100)搜索:text("abcd") Hits: 0 Undef Hits: 0 action Reference Count: 0 Done > 

使用命令行界面修改现有的重写操作

在命令提示符处,键入以下命令以修改现有的重写操作并验证配置:

  • 设置重写动作 [-target <表达式>][-stringBuilderExpr <表达式>][-search <表达式>][-refineSearch <表达式>][-comment <字符串>]

在命令提示符下,键入以下命令以验证修改后的配置

  • 显示重写操作

示例

> set重写动作insertact -target "Client-IP" Done > show重写动作insertact名称:insertact操作:insert_http_header目标:Client-IP值:CLIENT.IP。SRC Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done 

使用命令行界面删除重写操作

在命令提示符处,键入以下命令以删除重写操作:

Rm重写操作

示例

> rm重写动作insertact Done 

使用配置实用程序配置重写操作

  1. 导航到>重写(重写)>动作(操作)
  2. 在详细信息窗格中,执行以下操作之一:
    • 要创建操作,请单击添加
    • 要修改现有操作,请选择该操作,然后单击编辑
  3. 单击创建(创建)或好吧(确定)。状态栏中将显示一条消息,指出已成功配置操作。
  4. 重复步骤 2 到 4,根据需要创建或修改任意数量的重写操作。
  5. 单击关闭配置重写操作

使用添加表达式对话框添加表达式

  1. 创建重写操作配置重写操作对话框中,在要输入的类型参数的文本区域下,单击添加
  2. 在“添加表达式对话框中,在第一个列表框中为表达式选择第一个术语。

    • HTTP。HTTP协议。如果要检查与 HTTP 协议有关的请求的某些方面,请选择此选项。
    • 系统。受保护的网站。如果要检查请求中与请求收件人有关的某些方面,请选择此选项。
    • 客户端。发送请求的计算机。如果要检查请求发件人的某些方面,请选择此选项。

当你做出选择时,最右边的列表框会列出表达式下一部分的适当术语。

  1. 在第二个列表框中,为表达式选择第二个术语。这些选择取决于您在上一步中所做的选择,并且适合上下文。进行第二次选择后,“构造表达式”窗口下方的“帮助“窗口(该窗口为空)将显示描述刚刚选择的术语的用途和用法的帮助。

  2. 继续从上一列表框右侧显示的列表框中选择术语,或者在出现提示您输入值的文本框中键入字符串或数字,直到表达式完成。有关PI表达式语言和为响应方策略创建表达式的更多信息,请参阅”策略和表达式”。”

如果要测试在示例HTTP数据上使用重写操作的效果,则可以使用“重写表达式评估器”。

重写TCP有效负载

TCP重写操作中的目标表达式必须以下表达式前缀之一开头:

  • CLIENT.TCP.PAYLOAD。用于在客户端请求中重写TCP有效负载。例如,CLIENT.TCP.PAYLOAD(10000). after_str (" string1 ")。
  • SERVER.TCP.PAYLOAD。用于在服务器响应中重写TCP有效负载。例如,SERVER.TCP.PAYLOAD(1000). b64decode . between (" string1 ", " string2 ")。

使用“重写操作评估器”对话框评估重写操作

  1. 在“重写操作详细信息“窗格中,选择要评估的重写操作,然后单击”评估”。
  2. 在“重写表达式赋值器”对话框中,指定以下参数的值.(星号表示必填参数.)

    重写操作-如果尚未选择要评估的重写操作,请从下拉列表中选择它。选择“重写”操作后,详细信息“部分将显示所选”重写“操作的详细信息。新建-选择"新建"以打开"创建重写操作"对话框并创建重写操作。修改-选择修改以打开配置重写操作对话框并修改选定的重写操作。流程类型-指定是使用HTTP请求数据还是使用HTTP响应数据测试选定的重写操作。默认值为请求。如果要使用响应数据进行测试,请选择响应。HTTP请求/响应数据*-为您提供一个空间来提供重写操作评估器用于测试的HTTP数据。您可以直接将数据粘贴到窗口中,或者单击样本插入一些示例HTTP标头。显示行尾-指定是否在示例HTTP数据的每行末尾显示UNIX风格的行尾字符(\ n)。示例-将示例HTTP数据插入HTTP请求/响应数据窗口中。您可以选择get或post数据。浏览-打开本地浏览窗口,以便您可以从本地或网络位置选择包含示例HTTP数据的文件。 清除-从 “HTTP 请求/响应数据” 窗口清除当前示例 HTTP 数据。

  3. 单击评估。”重写操作评估器“评估”重写“操作对所选示例数据的影响”并在“结果”窗口中显示由选定的“重写操作修改的结果。添加和删除按照对话框左下角的图例所示突出显示。
  4. 继续评估重写操作,直到确定所有操作都具有所需的效果。

    • 您可以修改选定的重写操作并测试修改的版本,方法是单击修改以打开配置重写操作对话框,进行并保存更改,然后再次单击评估。
    • 您可以使用相同的请求或响应数据评估不同的重写操作,方法是从”重写操作”下拉列表中选择该操作,然后再次单击”评估”。
  5. 单击关闭关闭重写表达式赋值器并返回到重写操作窗格。

  6. 要删除重写操作,请选择要删除的重写操作,然后单击“删除”,然后在提示时单击”确定”确认您的选择。评估重写操作

配置重写策略

创建任何所需的重写操作后,必须至少创建一个重写策略来选择希望Citrix ADC设备重写的请求。

重写策略由规则组成,规则本身由一个或多个表达式组成,以及在请求或响应与规则匹配时执行的关联操作。评估HTTP请求和响应的策略规则可以基于请求或响应的几乎任何部分。

即使您不能使用TCP重写操作重写TCP有效负载以外的数据,也可以根据传输层和传输层以下各层中的信息来制定TCP重写策略的策略规则。

如果配置的规则与请求或响应匹配,则会触发相应的策略并执行与之关联的操作。

注意:

您可以使用命令行界面或GUI来创建和配置重写策略。不完全熟悉命令行界面和Citrix ADC策略表达式语言的用户通常会发现使用GUI容易得多。

使用命令行界面添加新的重写策略

在命令提示符处,键入以下命令以添加新的重写策略并验证配置:

  • []
  • .

示例 1.重写HTTP内容

>添加重写policyNew“HTTP.RES”。IS_VALID" insertact NOREWRITE Done > show rewrite policyNew名称:policyNew规则:HTTP.RES。IS_VALID RewriteAction: insertact UndefAction: NOREWRITE Hits: 0 Undef Hits: 0 Done 

示例 2.重写TCP有效负载(TCP重写)

> add重写策略client_tcp_payload_policy CLIENT.IP.SRC.EQ(172.168.12.232) client_tcp_payload_replace_all Done > show重写策略client_tcp_payload_policy名称:client_tcp_payload_policy规则:CLIENT.IP.SRC.EQ(172.168.12.232) RewriteAction: client_tcp_payload_replace_all UndefAction: Use Global LogAction: Use Global Hits: 0 Undef Hits: 0 Done > 

使用命令行界面修改现有的重写策略

在命令提示符处,键入以下命令以修改现有的重写策略并验证配置:

  • -rule -action []
  • .

示例:

>设置重写policyNew -rule HTTP.RES。IS_VALID" -action insertaction Done > show rewrite policyNew名称:policyNew规则:HTTP.RES. Name。IS_VALID RewriteAction: insertaction UndefAction: NOREWRITE Hits: 0 Undef Hits: 0 Done 

使用命令行界面删除重写策略

在命令提示符处,键入以下命令以删除重写策略:

Rm重写策略

示例:

> rm重写policyNew Done 

使用GUI配置重写策略

  1. 导航到AppExpert > Rewrite(重写)> Policies(策略)
  2. 在详细信息窗格中,执行以下操作之一:
    • 要创建策略,请单击添加(添加)。
    • 要修改现有策略,请选择该策略,然后单击 打开。
  3. 单击创建(创建)或好吧(确定)。状态栏中将显示一条消息,指出已成功配置策略。
  4. 重复步骤 2 到 4,根据需要创建或修改任意数量的重写操作。
  5. 单击关闭。要删除重写策略,请选择要删除的重写策略,然后单击“删除”,然后在提示时单击”确定”确认您的选择。

绑定重写策略

创建重写策略后,必须将其绑定以使其生效。如果要将策略应用于通过Citrix ADC的所有流量,则可以将策略绑定到全局,也可以将策略绑定到特定虚拟服务器或绑定点以仅定向该虚拟服务器或将点的传入流量绑定到该策略。如果传入的请求与重写策略匹配,则执行与该策略关联的操作。

用于评估HTTP请求和响应的重写策略可以绑定到HTTP或SSL类型的虚拟服务器,也可以绑定到REQ_OVERRIDE, REQ_DEFAULT, RES_OVERRIDE和RES_DEFAULT绑定点。TCP重写的重写策略只能绑定到 TCP 或 SSL_TCP 类型的虚拟服务器,或者绑定到 OTHERTCP_REQ_OVERRIDE、OTHERTCP_REQ_DEFAULT、OTHERTCP_RES_OVERRIDE 和OTHERTCP_RES_DEFAULT 绑定点。

注意:

术语OTHERTCP在Citrix ADC设备的上下文中用于指所有要视为原始字节流的TCP或SSL_TCP请求和响应,无论TCP数据包封装的协议如何。

绑定策略时,可以为其分配优先级。优先级决定了您定义的策略的评估顺序。可以将优先级设置为任何正整数。

在Citrix ADC操作系统中,策略优先级的顺序相反-数字越高,优先级越低。例如,如果您有三个优先级分别为 10、100 和 1000 的策略,则首先应用分配优先级为 10 的策略,然后应用策略分配的优先级为 100,最后,策略分配的顺序为 1000。

与Citrix ADC操作系统中的大多数其他功能不同,在请求与策略匹配后,重写功能将继续评估和实施策略。但是,特定操作策略对请求或响应的影响通常会有所不同,具体取决于它是在另一个操作之前还是之后执行的。优先级对于获得预期的结果非常重要。

您可以为自己留出足够的空间来按任意顺序添加其他策略,并通过在绑定策略之间设置每个策略之间的间隔为 50 或 100 的优先级,按照所需的顺序进行评估。如果执行此操作,则可以随时添加更多策略,而无需重新分配现有策略的优先级。

绑定重写策略时,您还可以选择为策略分配转到表达式(gotopRiorityExpression)。goto表达式可以是与分配给其他策略的优先级高于包含goto表达式的策略的优先级的任何正整数。如果您为策略分配了goto表达式,并且请求或响应与策略匹配,Citrix ADC将立即转到优先级与goto表达式匹配的策略。它会跳过优先级编号低于当前策略但高于去表达式优先级编号的所有策略,而不评估这些策略。

使用命令行界面全局绑定重写策略

在命令提示符下,键入以下命令以全局绑定重写策略并验证配置:

  • bind rewrite global [] [type ] [-invoke ( )]
  • 显示重写全局

示例:

>bind rewrite global policyNew 10 Done > show rewrite global 1) global bindpoint: RES_DEFAULT绑定策略个数:1 2)global bindpoint: REQ_OVERRIDE绑定策略个数:1 Done 

使用命令行界面将重写策略绑定到特定虚拟服务器

在命令提示符下,键入以下命令以将重写策略绑定到特定虚拟服务器并验证配置:

  • bind lb vserver @ (@ [-weight ]) | @ | (-policyName @ [-priority ] [-gotoPriorityExpression ] [-type (REQUEST | RESPONSE)] [-invoke ( )])
  • 显示lb vserver

示例:

> bind lb vserver lbvip - policyname ns_cmp_msapp -priority 50 Done > > show lb vserver lbvip lbvip (8.7.6.6:80) - HTTP Type: ADDRESS State: DOWN Last State change was at Wed Jul 15 05:54:24 2009 (+226 ms) Time since Last State change was at Wed Jul 15 05:54:24 2009 (+226 ms) Time since Last State change: 28 days, 01:57:26.350 Effective State: DOWN Client Idle Timeout: 180 sec DOWN State flush: ENABLED Disable Primary vserver On DOWN: DISABLED Port Rewrite: DISABLED否绑定服务:0 (Total) 0 (Active)配置方法:LEASTCONNECTION模式:IP持久化:NONE Vserver IP和端口插入:OFF Push: DISABLED Push Vserver: Push Multi Clients: NO Push Label规则:NONE 1) Policy: ns_cmp_msapp优先级:50 2)Policy: cf-pol优先级:1 Inherited Done 

使用GUI将重写策略绑定到绑定点

  1. 导航到AppExpert>重写>策略
  2. 在详细信息窗格中,选择要全局绑定的重写策略,然后单击策略管理器
  3. 在“重写策略管理器“对话框的”绑定点菜单中,执行以下操作之一:
    1. 如果要为HTTP重写策略配置绑定,请单击HTTP,然后单击请响应,具体取决于要配置基于请求的重写策略还是基于响应的重写策略。
    2. 如果要为TCP重写策略配置绑定,请单击TCP,然后单击客户端服务器,具体取决于要配置客户端TCP重写策略还是服务器端TCP重写策略。
  4. 单击要将重写策略绑定到的绑定点。”重写策略管理器对话框显示绑定到选定绑定点的所有重写策略。
  5. 单击插入策略插入新行并显示包含所有可用的未绑定重写策略的下拉列表。
  6. 单击要绑定到绑定点的策略。该策略将插入绑定到绑定点的重写策略列表中。
  7. 在“优先级列中,您可以将优先级更改为任意正整数。有关此参数的更多信息,请参阅用于绑定重写策略的参数中的优先级。”
  8. 如果要跳过策略并在当前策略匹配的情况下直接转到特定策略,请将“转到表达式”列中的值更改为等于要应用的下一个策略的优先级。有关此参数的更多信息,请参阅用于绑定重写策略的参数中的GotopRiorityExpression。”
  9. 要修改策略,请单击策略,然后单击修改策略
  10. 要取消绑定策略,请单击该策略,然后单击取消绑定策略
  11. 要修改操作,请在“操作”列中单击要修改的操作,然后单击“修改操作”。
  12. 要修改调用标签,请在调用列中单击要修改的调用标签,然后单击修改调用标签
  13. 要重新生成绑定到当前正在配置的绑定点的所有策略的优先级,请单击重新生成优先级。这些策略保留了相对于其他策略的现有优先级,但优先级以 10 的倍数重新编号。
  14. 单击应用更改
  15. 单击关闭。状态栏中将显示一条消息,指出已成功配置策略。

使用GUI将重写策略绑定到特定虚拟服务器

  1. 导航到流量管理>负载平衡>虚拟服务器
  2. 在虚拟服务器的详细信息窗格列表中,选择要绑定重写策略的虚拟服务器,然后单击打开
  3. 配置虚拟服务器(负载平衡)对话框中,选择策略选项卡。Citrix ADC 上配置的所有策略都会显示在列表中。
  4. 选中要绑定到此虚拟服务器的策略名称旁边的复选框。
  5. 单击”确定”。状态栏中将显示一条消息,指出已成功配置策略。

配置重写策略标签

如果要构建比单个策略所支持的更复杂的策略结构,则可以创建策略标签,然后像绑定策略一样绑定它们。策略标签是用户定义的策略绑定点。调用策略标签时,将按照您配置的优先级顺序评估绑定到该标签的所有策略。策略标签可以包含一个或多个策略,每个策略都可以分配自己的结果。策略标签中的一个策略匹配可能导致继续执行下一个策略、调用不同的策略标签或适当的资源,或者立即结束策略评估并恢复对调用策略标签的策略的控制权。

重写策略标签由名称、描述策略标签中包含的策略类型的转换名称以及绑定到策略标签的策略列表组成。绑定到策略标签的每个策略都包含配置重写策略中描述的所有元素。

注意:您可以使用命令行界面或GUI创建和配置重写策略标签。不完全熟悉命令行界面和Citrix ADC策略基础架构(PI)语言的用户通常会发现使用GUI容易得多。

使用命令行界面配置重写策略标签

要添加重写策略标签,请在命令提示符处键入以下命令:

add rewrite policylabel

例如,要添加名为pollabelHttpResponses的重写策略标签以对所有处理HTTP响应的策略进行分组,您需要键入以下命令:

添加重写策略标签polLabelHTTPResponses http_res

要修改现有的重写策略标签,请在Citrix ADC命令提示符下键入以下命令:

设置重写策略

注意:

设置重写策略命令采用与添加重写策略命令相同的选项。

要删除重写策略标签,请在Citrix ADC命令提示符下键入以下命令:

Rm重写策略

例如,要删除名为pollabelHttpResponses的重写策略标签,可以键入以下命令:

rm重写polLabelHTTPResponses策略

使用GUI配置重写策略标签

  1. 导航到AppExpert>重写>策略标签
  2. 在详细信息窗格中,执行以下操作之一:
    • 要创建策略标签,请单击添加
    • 要修改现有策略标签,请选择该策略,然后单击打开
  3. 在绑定到策略标签的列表中添加或删除策略。
    • 要将策略添加到列表中,请单击”插入策略,然后从下拉列表中选择策略。您可以创建策略并将其添加到列表中,方法是在列表中选择新建策略,然后按照配置重写策略中的说明进行操作。
    • 若要从列表中删除策略,请选择该策略,然后单击“取消绑定策略”。
  4. 通过编辑优先级列中的数字来修改每个策略的优先级。您还可以通过单击“重新生成优先级”自动重新编号策略。
  5. 单击创建(创建)或好吧(确定),然后单击关闭(关闭)。要删除策略标签,请选择该标签,然后单击”删除”。要重命名策略标签,请选择该标签,然后单击重命名。编辑策略的名称,然后单击”确定”以保存更改。