Citrix ADC

高级策略表达式的基本功能

高级策略表达式至少由前缀(或单个元素代替前缀)组成。大多数表达式还指定要对前缀标识的数据执行的操作。您可以设置最多 1,499 个字符的表达式的格式,如下所示:

<prefix>.<operation> [<compound-operator> <prefix>.<operation>. . .]

其中

  • <prefix>

    是用于启动表达式的锚点。

    前缀是一个用于标识数据单位的周期分隔键。例如,以下前缀检查 HTTP 请求是否存在名为“内容类型”的标头:

    http.req.header(“Content-Type”)

    前缀也可以自行使用来返回前缀标识的对象的值。

  • <operation>

    标识要对由前缀标识的数据执行的评估。

    例如,请考虑以下表达式:

    http.req.header(“Content-Type”).eq(“text/html”)

    在此表达式中,下面是运算符组件:

    eq(“text/html”)

    此运算符使 Citrix ADC 评估包含内容类型标头的任何 HTTP 请求,特别是确定此标头的值是否等于字符串“text/html”。有关详细信息,请参阅操作

  • <compound-operator>

    是一个布尔运算符或算术运算符,它从多个前缀或前缀 .操作元素形成复合表达式。

    例如,请考虑以下表达式:

    http.req.header(“Content-Type”).eq(“text/html”) && http.req.url.contains(“.html”)

前缀

表达式前缀表示离散数据片段。例如,表达式前缀可以表示 HTTP URL、HTTP Cookie 标头或 HTTP POST 请求正文中的字符串。表达式前缀可以识别和返回各种数据类型,包括以下内容:

  • TCP/IP 数据包中的客户端 IP 地址
  • Citrix ADC 系统时间
  • 通过 HTTP 进行的外部标注
  • TCP 或 UDP 记录类型

在大多数情况下,表达式前缀以下列关键字之一开头:

  • CLIENT:
    • 标识正在发送请求或接收响应的客户端的特征,如以下示例所示:
    • 前缀 client.ip.dst 指定请求或响应中的目标 IP 地址。
    • 前缀 client.ip.src 指定源 IP 地址。
  • HTTP:
    • 标识 HTTP 请求或响应中的元素,如以下示例所示:
    • 前缀 http.req.body(integer) 将 HTTP 请求的正文指定为多行文本对象,直到以整数指定的字符位置。
    • 前缀 http.req.header(“header_name”) 指定一个 HTTP 头,如头名称中所指定的那样。
    • 前缀 http.req.url 指定一个 URL 编码格式的 HTTP URL。
  • SERVER:

    标识服务器中正在处理请求或发送响应的元素。

  • SYS:

    标识正在处理流量的 Citrix ADC 的特征。

    注意: 请注意,DNS 策略仅支持 SYS、客户端和服务器对象。

    此外,在 Citrix Gateway 中,无客户端 VPN 功能可以使用以下类型的前缀:

  • TEXT:

    标识请求或响应中的任何文本元素。

  • TARGET:

    标识连接的目标。

  • URL:

    标识 HTTP 请求或响应的 URL 部分中的元素。

作为一般的经验法则,任何表达式前缀都可以是一个自包含的表达式。例如,以下前缀是一个完整的表达式,它返回字符串参数中指定的 HTTP 标头的内容(用引号括起来):

http.res.header.("myheader")

或者,您可以将前缀与简单操作相结合,以确定 TRUE 和 FALSE 值。例如,以下内容返回 TRUE 或 FALSE 的值:

http.res.header.("myheader").exists

您还可以对表达式中的单个前缀和多个前缀使用复杂操作,如以下示例所示:

http.req.url.length + http.req.cookie.length <= 500

可以指定哪些表达式前缀取决于 Citrix ADC 功能。下表描述了每个功能感兴趣的表达式前缀

功能 功能中使用的表达式前缀类型
DNS SYS, CLIENT, SERVER
保护功能中的响应程序 HTTP, SYS, CLIENT
内容交换 HTTP, SYS, CLIENT
重写 HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN
集成缓存 HTTP, SYS, CLIENT, SERVER
Citrix Gateway,无客户端访问 HTTP, SYS, CLIENT, SERVER, URL, TEXT, TARGET, VPN

表 1. 各种 Citrix ADC 功能中允许的表达式前缀类型

注意: 有关功能中允许的表达式前缀的详细信息,请参阅该功能的文档。

单元素表达式

最简单的高级策略表达式包含单个元素。此元素可以是以下内容之一:

  • 真的。高级策略表达式可以仅由值 true 组成。这种类型的表达式始终返回 TRUE 的值。它对于链接策略操作和触发 Goto 表达式非常有用。
  • 假的。高级策略表达式可以仅由值 false 组成。这种类型的表达式始终返回 FALSE 的值。
  • 复合表达式的前缀。例如,前缀 HTTP.REQ.HOSTNAME 是返回主机名的完整表达式,HTTP.REQ.URL 是返回 URL 的完整表达式。前缀也可以与操作和其他前缀结合使用,以形成复合表达式。

操作

在大多数表达式中,您还可以指定对前缀标识的数据进行操作。例如,假设您指定以下前缀:

http.req.url

此前缀提取 HTTP 请求中的 URL。此表达式前缀不需要在表达式中使用任何运算符。但是,当您配置处理 HTTP 请求 URL 的表达式时,您可以指定用于分析 URL 特定特征的操作。下面是几种可能性:

  • 在 URL 中搜索特定主机名。
  • 在 URL 中搜索特定路径。
  • 评估 URL 的长度。
  • 在 URL 中搜索指示时间戳的字符串并将其转换为 GMT。

下面是标识名为 Server 的 HTTP 标头的前缀示例,以及在标头值中搜索字符串 IIS 的操作:

http.res.header("Server").contains("IIS")

下面是标识主机名的前缀示例,以及搜索字符串“www.mycompany.com”作为名称值的操作:

http.req.hostname.eq("www.mycompany.com")

表达式前缀的基本操作

下表描述了一些可以对表达式前缀执行的基本操作。

操作 确定是否
CONTAINS(<string>) 对象匹配 <string>。下面是一个示例:http.req.header(“Cache-Control”).contains(“no-cache”)
存在 特定项目存在于对象中。下面是一个示例:http.res.header(“MyHdr”).exists
EQ(<text>) 对象中存在一个特定的非数字值。下面是一个示例:http.req.method.eq(post)
EQ(<integer>) 对象中存在一个特定的数值。下面是一个示例:client.ip.dst.eq(10.100.10.100)
LT(<integer>) 对象的值小于特定值。下面是一个示例:http.req.content_length.lt(5000)
GT(<integer>) 对象的值大于特定值。下面是一个示例:http.req.content_length.gt(5)

下表总结了几种可用的操作类型。

操作类型 说明
文本操作 将单个字符串和字符串集与目标的任何部分匹配。目标可以是整个字符串、字符串的开头或字符串的开头和结尾之间的任何文本部分。例如,您可以从“XYZSomeText”中提取字符串“XYZ”。或者,您可以将 HTTP 标头值与不同字符串的数组进行比较。您还可以将文本转换为其他类型的数据。以下示例:将字符串转换为整数值,从 URL 中的查询字符串创建列表,然后将字符串转换为时间值。
数字操作 数值运算包括应用算术运算符、评估内容长度、列表中的项目数、日期、时间和 IP 地址。

高级策略表达式的基本功能