Citrix ADC

重写

警告:

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

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

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

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

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

  • 如果您想启动新 Web 站点,但使用旧 URL,则可以使用“Rewrite”(重写)选项。

  • 当站点中的主题具有复杂的 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,则会添加与执行关联操作的策略相关联的操作。当策略规则中指定的特性与被评估的请求或响应的特性匹配时,就会发生匹配。

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

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

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

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

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

图 1. 重写过程

图片

策略评估

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

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

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

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

注意:

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

重写操作

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

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

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

注意

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

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

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

启用重写

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

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

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

  • 启用 ns 功能重写
  • show ns feature

示例:

> enable ns feature REWRITE
 Done
> show ns feature

        Feature                        Acronym              Status
        -------                        -------              ------
 1)     Web Logging                    WL                   OFF
 2)     Surge Protection               SP                   ON
 .
 .
 .
 1)     Rewrite                        REWRITE              ON
 .
 .
 1)     Citrix ADC Push                 push                 OFF
 Done
<!--NeedCopy-->

使用 GUI 启用重写功能

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

配置重写操作

警告

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

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

表达式定义以下内容:

  • 重写操作类型。

  • 重写操作的位置。

  • 重写操作配置类型。

例如,DELETE 操作只使用目标表达式。REPLACE 操作使用目标表达式和表达式来配置替换文本。

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

注意:

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

有关详细信息,请参阅 Type 参数

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

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

  • add rewrite action <name> <type> <target> [<stringBuilderExpr>] [-search <expression>] [refineSearch <expression>] [-comment<string>]
  • show rewrite action <name>

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

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

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

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

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

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

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

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

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

名称

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

类型参数

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

以下是 Type 参数的值:

  • REPLACE <target> <string_builder_expr>。用字符串构建器表达式替换字符串。

示例

> add rewrite action replace_http_act replace http.res.body(100) '"new_replaced_data"'
Done
> sh rewrite action replace_http_act
Name: replace_http_act
Operation: replace
Target:http.res.body(100)
Value:"new_replaced_data"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_ALL <target> <string_builder_expr1> -(search) <string_builder_expr2>。在 <target> 指定的请求或响应中,将 <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://""-search "patset("pat_list_2")" -refineSearch "EXTEND(7,0).REGEX_SELECT(re#http://#)"
Done

> sh rewrite action refineSearch_act_31
Name: refineSearch_act_31
Operation: replace_all
Target:HTTP.RES.BODY(100000)
Refine Search:EXTEND(7,0).REGEX_SELECT(re#http://#)
Value:"https://"
Search: patset("pat_list_2")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_HTTP_RES <string_builder_expr>。用字符串构建器表达式定义的字符串替换完整的 HTTP 响应。

示例

> add rewrite action replace_http_res_act replace_http_res '"HTTP/1.1 200 OK\r\n\r\nSending from ADC"'
 Done
> sh rewrite action replace_http_res_act
Name: replace_http_res_act
Operation: replace_http_res
Target:"HTTP/1.1 200 OK
Sending from ADC"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_SIP_RES <target>。用 <target> 指定的字符串替换完整的 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

<!--NeedCopy-->
  • INSERT_HTTP_HEADER <header_string_builder_expr> <contents_string_builder_expr>。Inserts the HTTP header specified by <header_string_builder_expr> and header contents specified by <contents_string_builder_expr>。

示例

> add rewrite action ins_cip_header insert_http_header "CIP" "CLIENT.IP.SRC"
Done
> sh rewrite action ins_cip_header
Name: ins_cip_header
Operation: insert_http_header
Target:CIP
Value:CLIENT.IP.SRC
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • DELETE_HTTP_HEADER <target>。删除 <target> 指定的 HTTP 标头

示例

> add rewrite action del_true_client_ip_header delete_http_header "True-Client-IP"
Done
> sh rewrite action del_true_client_ip_header
Name: del_true_client_ip_header
Operation: delete_http_header
Target:True-Client-IP
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CORRUPT_HTTP_HEADER <target>。用损坏的名称替换 <target> 所指定的所有 HTTP 标头的标头名称,以便接收者无法识别该名称示例:MY_HEADER 更改为 MHEY_ADER。

示例


> add rewrite action corrupt_content_length_hdr corrupt_http_header "Content-Length"
Done
> sh rewrite action corrupt_content_length_hdr
Name: corrupt_content_length_hdr
Operation: corrupt_http_header
Target:Content-Length
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_BEFORE <string_builder_expr1> <string_builder_expr1>。查找在 <string_builder_expr1> 中指定的字符串并在其前面插入 <string_builder_expr2> 中的字符串。
> add rewrite action insert_before_ex_act insert_before http.res.body(100) '"Add this string in the starting"'
Done
> sh rewrite action insert_before_ex_act
Name: insert_before_ex_act
Operation: insert_before
Target:http.res.body(100)
Value:"Add this string in the starting"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_BEFORE_ALL <target> <string_builder_expr1> -(search) <string_builder_expr2>。在 <target> 指定的请求或响应中,查找在 <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(10,10)
 Done
> sh rewrite action refineSearch_act_1
Name: refineSearch_act_1
Operation: insert_before_all
Target:http.res.body(10)
Refine Search:extend(10,10)
Value:target.prefix(10) + "refineSearch_testing"
Search: patset("pat")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_AFTER <string_builder_expr1> <string_builder_expr2>。查找在 <string_builder_expr1>中指定的字符串,然后在其后插入在 <string_builder_expr2> 中指定的字符串。 示例
> add rewrite action insert_after_act insert_after http.req.body(100) '"add this string after 100 bytes"'
Done
> sh rewrite action insert_after_act
Name: insert_after_act
Operation: insert_after
Target:http.req.body(100)
Value:"add this string after 100 bytes"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_AFTER_ALL <target> <string_builder_expr1> -(search) <string_builder_expr>。在 <target> 指定的请求或响应中,查找在 <string_builder_expr1> 中指定的字符串的所有匹配项并在每个后面插入在 <string_builder_expr2> 中指定的字符串。您可以使用搜索工具查找字符串。

示例


> add rewrite action refineSearch_act_2 insert_after_all http.res.body(100) '"refineSearch_testing"' -search text("abc") -refineSearch extend(0, 10)
Done
> sh rewrite action refineSearch_act_2
Name: refineSearch_act_2
Operation: insert_after_all
Target:http.res.body(100)
Refine Search:extend(0, 10)
Value:"refineSearch_testing"
Search: text("abc")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • DELETE <target>。查找并删除指定的目标。

示例

> add rewrite action delete_ex_act delete http.req.header("HDR")
Done
> sh rewrite action delete_ex_act
Name: delete_ex_act
Operation: delete
Target:http.req.header("HDR")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • DELETE_ALL <target> -(search) <string_builder_expr>。在由 <target> 指定的请求或响应中,查找并删除 <string_builder_expr> 所指定的字符串的所有匹配项。您可以使用搜索工具查找字符串。

示例


>add rewrite action refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)" -search text("Windows Desktops") -refineSearch "EXTEND(40,40).REGEX_SELECT(re#\s`\*`<AppData>.`\*`\s`\*`<\\/AppData>#)"
Done
> show REWRITE action refineSearch_act_4
Name: refineSearch_act_4
Operation: delete_all
Target:HTTP.RES.BODY(50000)
Refine Search:EXTEND(40,40).REGEX_SELECT(re#\s`\*`<AppData>.`\*`\s`\*`</AppData>#)
Search: text("Windows Desktops")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_DIAMETER_HEADER_FIELD <target> <field value>。在请求或响应中,修改由 <target> 指定的标题字段。使用 Diameter.req.flags.SET(<flag>)Diameter.req.flags.UNSET<flag> 作为 stringbuilderexpression 以设置或取消设置标志。

示例


> add rewrite action replace_diameter_field_ex_act  replace_diameter_header_field diameter.req.flags diameter.req.flags.set(PROXIABLE)
Done
> sh rewrite action replace_diameter_field_ex_act
Name: replace_diameter_field_ex_act
Operation: replace_diameter_header_field
Target:diameter.req.flags
Value:diameter.req.flags.set(PROXIABLE)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_DNS_HEADER_FIELD <target>。在请求或响应中修改由 <target> 指定的标题字段。

示例


> add rewrite action replace_dns_hdr_act replace_dns_header_field dns.req.header.flags.set(AA)
Done
> sh rewrite action replace_dns_hdr_act
Name: replace_dns_hdr_act
Operation: replace_dns_header_field
Target:dns.req.header.flags.set(AA)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • REPLACE_DNS_ANSWER_SECTION <target>。替换响应中的 DNS 答案部分。这仅适用于 A 和 AAAA 记录。使用 DNS.NEW_RRSET_ANS.NEW_RRSET_AAAA 表达式来配置新的答案部分。

示例


> add rewrite action replace_dns_ans_act replace_dns_answer_section  DNS.NEW_RRSET_A("1.1.1.1", 10)
Done
> sh rewrite action replace_dns_ans_act
Name: replace_dns_ans_act
Operation: replace_dns_answer_section
Target:DNS.NEW_RRSET_A("1.1.1.1", 10)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CLIENTLESS_VPN_DECODE<target>。以无客户端 VPN 格式解码目标指定的模式。

示例


> add rewrite action cvpn_decode_act_1 clientless_vpn_decode http.req.body(100)
Done
> sh rewrite action cvpn_decode_act_1
Name: cvpn_decode_act_1
Operation: clientless_vpn_decode
Target:http.req.body(100)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CLIENTLESS_VPN_DECODE_ALL<target>-search<expression>。以无客户端 VPN 格式解码搜索参数指定的所有模式。

示例


> add rewrite action act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act1
Name: act1
Operation: clientless_vpn_decode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CLIENTLESS_VPN_ENCODE<target>。以无客户端 VPN 格式对目标指定的模式进行编码。

示例


> add rewrite action cvpn_encode_act_1 clientless_vpn_encode http.req.body(100)
Done
> sh rewrite action cvpn_encode_act_1
Name: cvpn_encode_act_1
Operation: clientless_vpn_encode
Target:http.req.body(100)
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CLIENTLESS_VPN_ENCODE_ALL<target>-search<expression>。以无客户端 VPN 格式编码指定的搜索参数的所有模式。

示例


> add rewrite action act2 clientless_vpn_encode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act2
Name: act1
Operation: clientless_vpn_encode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • CORRUPT_SIP_HEADER<target>。用损坏的名称替换 <target> 指定的所有 SIP 报头的标头名称,以便接收方无法识别。

示例


> add rewrite action corrupt_sip_hdr_act corrupt_sip_header SIP_HDR
Done
> sh rewrite action corrupt_sip_hdr_act
Name: corrupt_sip_hdr_act
Operation: corrupt_sip_header
Target:SIP_HDR
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • INSERT_SIP_HEADER <header_string_builder_expr> <contents_string_builder_expr>。插入由 <header_string_builder_expr> 指定的 SIP 标头和 <contents_string_builder_expr> 指定的标头内容。

示例


> add rewrite action insert_sip_hdr_act insert_sip_header SIP_HDR '"inserting_sip_header"'
 Done
>sh rewrite action insert_sip_hdr_act
Name: insert_sip_hdr_act
Operation: insert_sip_header
Target:SIP_HDR
Value:"inserting_sip_header"
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->
  • DELETE_SIP_HEADER<target>。删除 <target> 指定的 SIP 标头

示例


> add rewrite action delete_sip_hdr delete_sip_header  SIP_HDR
Done
> sh rewrite action delete_sip_hdr
Name: delete_sip_hdr
Operation: delete_sip_header
Target:SIP_HDR
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

Target 参数

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

StringBuilderExpr

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

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


> add rewrite action insertact INSERT_HTTP_HEADER "client-IP" CLIENT.IP.SRC
Done
> show rewrite action insertact
Name: insertact
Operation: insert_http_header
Target:Client-IP
Value:CLIENT.IP.SRC
BypassSafetyCheck : NO
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

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


> add rewrite action client_tcp_payload_replace_all REPLACE_ALL
  'client.tcp.payload(1000)' '"new-string"' -search text("old-string")
Done
> show rewrite action client_tcp_payload_replace_all
Name: client_tcp_payload_replace_all
Operation: replace_all
Target:client.tcp.payload(1000)
Value:"new-string"
Search: text("old-string")
BypassSafetyCheck : NO
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->

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

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

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

  • INSERT T_BEFORE_ALL
  • INSERT T_AFTER_ALL
  • REPLACE_ALL
  • DELETE E_ALL
  • CLIENTLESS_VPN_ENCODE_ALL
  • CLIENTLESS_VPN_DECODE_ALL

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

  • INSERT_HTTP_HEADER
  • INSERT_BEFORE
  • INSERT_AFTER
  • REPLACE
  • DELETE
  • DELETE_HTTP_HEADER
  • CORRUPT_HTTP_HEADER
  • REPLACE_HTTP_RES
  • CLIENTLESS_VPN_ENCODE
  • CLIENTLESS_VPN_DECODE
  • INSERT T_SIP_HEADER
  • DELETE_SIP_HEADER
  • CORRUPT_SIP_HEADER
  • REPLACE_DIAMETER_HEADER_FIELD
  • REPLACE_DNS_ANSWER_SECTION
  • REPLACE_DNS_HEADER_FIELD
  • REPLACE_SIP_RES

支持以下搜索类型:

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

优化搜索结果

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

如果配置的重写操作是:


> add rewrite action test_refine_search replace_all http.res.body(10) '”testing_refine_search”' -search text("abc") -refineSearch extend(1,1)
And the HTTP response body is 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(10,10)
Done
> sh rewrite action refineSearch_act_1
Name: refineSearch_act_1
Operation: insert_before_all
Target:http.res.body(10)
Refine Search:extend(10,10)
Value:target.prefix(10) + "refineSearch_testing"
Search: patset("pat")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

示例 2:使用 INSERT_AFTER_ALL 操作类型中的 “细化搜索功能”。


> add rewrite action refineSearch_act_2 insert_after_all http.res.body(100) '"refineSearch_testing"' -search text("abc") -refineSearch extend(0, 10)
Done
> sh rewrite action refineSearch_act_2
Name: refineSearch_act_2
Operation: insert_after_all
Target:http.res.body(100)
Refine Search:extend(0, 10)
Value:"refineSearch_testing"
Search: text("abc")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

示例 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 "EXTEND(7,0).REGEX_SELECT(re#http://#)"
Done
> sh rewrite action refineSearch_act_31
Name: refineSearch_act_31
Operation: replace_all
Target:HTTP.RES.BODY(100000)
Refine Search:EXTEND(7,0).REGEX_SELECT(re#http://#)
Value:"https://"
Search: patset("pat_list_2")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

示例 4:在 DELETEE_ALL 操作类型中使用 “细化搜索功能”。


>add rewrite action refineSearch_act_4 delete_all "HTTP.RES.BODY(50000)" -search text("Windows Desktops") -refineSearch "EXTEND(40,40).REGEX_SELECT(re#\s*<AppData>.\*\s\*<\\/AppData>#)"
> show REWRITE action refineSearch_act_4
Name: refineSearch_act_4
Operation: delete_all
Target:HTTP.RES.BODY(50000)
Refine Search:EXTEND(40,40).REGEX_SELECT(re#\s*<AppData>.\*\s\*</AppData>#)
Search: text("Windows Desktops")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->

示例 5:在 CLILESS_VPN_ENCODE_ALL 操作类型中使用 “细化搜索” 功能。

’’’

add rewrite action act2 clientless_vpn_encode_all http.req.body(100) -search text(“abcd”) Done sh rewrite action act2 Name: act1 Operation: clientless_vpn_encode_all Target:http.req.body(100) Search: text(“abcd”) Hits: 0 Undef Hits: 0 Action Reference Count: 0 Done

’’’

示例 6:在 CLILESS_VPN_DECODE_ALL 操作类型中使用 “细化搜索” 功能。


> add rewrite action act1 clientless_vpn_decode_all http.req.body(100) -search text("abcd")
Done
> sh rewrite action act1
Name: act1
Operation: clientless_vpn_decode_all
Target:http.req.body(100)
Search: text("abcd")
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done
>
<!--NeedCopy-->

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

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

  • set rewrite action <name> [-target <expression>] [-stringBuilderExpr <expression>] [-search <expression>] [-refineSearch <expression>] [-comment <string>]

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

  • show rewrite action <name>

示例


> set rewrite action insertact -target "Client-IP"
 Done
> show rewrite action insertact

Name: insertact
Operation: insert_http_header   Target:Client-IP
Value:CLIENT.IP.SRC
Hits: 0
Undef Hits: 0
Action Reference Count: 0
Done

<!--NeedCopy-->

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

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

rm rewrite action <name>

示例


> rm rewrite action insertact
Done

<!--NeedCopy-->

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

  1. 导航到 AppExpert > Rewrite(重写)> Actions(操作)
  2. 在详细信息窗格中,执行以下操作之一:
    • 要创建操作,请单击 添加
    • 要修改现有操作,请选择该操作,然后单击 编辑
  3. 单击 Create(创建)或 OK(确定)。状态栏中将显示一条消息,指出已成功配置操作。
  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 容易得多。

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

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

  • <add rewrite policy <name> <expression> <action> [<undefaction>]
  • <show rewrite policy <name>

示例 1. 重写 HTTP 内容


> add rewrite policyNew "HTTP.RES.IS_VALID" insertact NOREWRITE
 Done
> show rewrite policyNew
        Name: policyNew
        Rule: HTTP.RES.IS_VALID
        RewriteAction: insertact
        UndefAction: NOREWRITE
        Hits: 0
        Undef Hits: 0

 Done
<!--NeedCopy-->

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

> add rewrite policy client_tcp_payload_policy CLIENT.IP.SRC.EQ(172.168.12.232) client_tcp_payload_replace_all
 Done
> show rewrite policy client_tcp_payload_policy
        Name: client_tcp_payload_policy
        Rule: 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
>
<!--NeedCopy-->

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

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

  • <set rewrite policy <name> -rule <expression> -action <action> [<undefaction>]
  • <show rewrite policy <name>

示例:


> set rewrite policyNew -rule "HTTP.RES.IS_VALID" -action insertaction
 Done

> show rewrite policyNew
        Name: policyNew
        Rule: HTTP.RES.IS_VALID
        RewriteAction: insertaction
        UndefAction: NOREWRITE
        Hits: 0
        Undef Hits: 0

 Done
<!--NeedCopy-->

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

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

rm rewrite policy <name>

示例:


> rm rewrite policyNew
Done
<!--NeedCopy-->

使用 GUI 配置重写策略

  1. 导航到 AppExpert > Rewrite(重写)> Policies(策略)
  2. 在详细信息窗格中,执行以下操作之一:
    • 要创建策略,请单击 Add(添加)。
    • 要修改现有策略,请选择该策略,然后单击 打开。
  3. 单击 Create(创建)或 OK(确定)。状态栏中将显示一条消息,指出已成功配置策略。
  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 表达式匹配的策略。它会跳过优先级编号低于当前策略但高于 goto 表达式优先级编号的所有策略,而不评估这些策略。

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

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

  • bind rewrite global <policyName> <priority> [<gotoPriorityExpression>] [-type <type>] [-invoke (<labelType> <labelName>)]
  • show rewrite global

示例:


>bind rewrite global policyNew 10
 Done

> show rewrite global
1)      Global bindpoint: RES_DEFAULT
        Number of bound policies: 1

2)      Global bindpoint: REQ_OVERRIDE
        Number of bound policies: 1

 Done
<!--NeedCopy-->

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

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

  • bind lb vserver <name>@ (<serviceName>@ [-weight <positive_integer>]) | <serviceGroupName>@ | (-policyName <string>@ [-priority <positive_integer>] [-gotoPriorityExpression <expression>] [-type ( REQUEST | RESPONSE )] [-invoke (<labelType> <labelName>)] )
  • show lb vserver <name>

示例:

> 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: 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
        No. of Bound Services :  0 (Total)       0 (Active)
        Configured Method: LEASTCONNECTION
        Mode: IP
        Persistence: NONE
        Vserver IP and Port insertion: OFF
        Push: DISABLED  Push VServer:
        Push Multi Clients: NO
        Push Label Rule: none

1)      Policy : ns_cmp_msapp Priority:50
2)      Policy : cf-pol Priority:1      Inherited
 Done
<!--NeedCopy-->

使用 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 <labelName> <transform>

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

add rewrite policy label polLabelHTTPResponses http_res

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

set rewrite policy <name> <transform>

注意:

set rewrite policy 命令采用与添加重写策略命令相同的选项。

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

rm rewrite policy<name>

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

rm rewrite policy polLabelHTTPResponses

使用 GUI 配置重写策略标签

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