Citrix ADC

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

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

<前缀>。<操作>[<复合操作> <前缀>.<操作>…]

其中

  • <前缀>

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

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

    http.req.header(“内容类型”)

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

  • <操作>

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

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

    http.req.header(“内容类型”).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.ip.dst指定请求或响应中的目标IP地址。
    • 前缀client.ip.src指定源IP地址。
  • HTTP:
    • 标识HTTP请求或响应中的元素,如以下示例所示:
    • 前缀http.req.body(整数)将HTTP请求的正文指定为多行文本对象,直到以整数指定的字符位置。
    • 前缀http.req.header(“header_name”)指定一个HTTP头,如头名称中所指定的那样。
    • 前缀HTTP .req. URL指定一个URL编码格式的HTTP URL。
  • 服务器:

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

  • 系统:

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

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

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

  • 文本:

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

  • 目标:

    标识连接的目标。

  • 网址:

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

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

http.res.header。(“到了头”)

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

.exists http.res.header。(“到了头”)

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

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

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

功能 功能中使用的表达式前缀类型
DNS 系统,客户端,服务器
保护功能中的响应程序 Http, sys,客户端
内容交换 Http, sys,客户端
重写 Http, sys,客户端,服务器,url,文本,目标,VPN
集成缓存 Http, sys,客户端,服务器
Citrix Gateway,无客户端访问 Http, sys,客户端,服务器,url,文本,目标,VPN

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

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

单元素表达式

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

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

操作

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

http.req.url

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

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

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

http.res.header(“服务器”).contains (IIS)

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

http.req.hostname.eq(“www.mycompany.com”)

表达式前缀的基本操作

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

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

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

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