Citrix ADC

配置选择器和基本内容组

您可以配置选择器并将其应用于内容组。向一个或多个内容组添加选择器时,您可以指定选择器是用于标识缓存点击或标识要失效的缓存对象(过期)。选择器是可选的。或者,您可以将内容组配置为使用点击参数和失效参数。但是,Citrix 建议您配置选择器。

配置选择器或决定改用参数后,您可以设置基本内容组。创建基本内容组后,您需要决定如何从缓存中过期对象,并配置缓存过期。您可以按照提高缓存性能和中的描述进一步修改缓存配置 Cookie、标题和轮询,但您可能首先需要配置缓存策略。

注意

内容组参数和选择器仅在请求时使用,并且您通常将它们与使用 MAY_CACHE 或 MAY_NOCACHE 操作的策略相关联。

选择器的优点

选择器是用于定位内容组中特定对象的过滤器。如果未配置选择器,Citrix® ADC 设备将在内容组中查找完全匹配。这可能会导致同一对象的多个副本驻留在内容组中。例如,没有选择器的内容组可能需要存储 host1.domain.com\mypage.htm、host2.domain.com\mypage.htm 和 host3.domain.com\mypage.htm 的 URL。相比之下,选择器只能匹配 URL (mypage.html, using the expression http.req.url) 和域(.com,使用表达式 http.req.hostname.domain),从而允许通过相同的 URL 满足请求。

选择器表达式可以执行参数的简单匹配(例如,查找与几个查询字符串参数及其值匹配的对象)。选择器表达式可以使用布尔逻辑、算术运算和属性组合来识别对象(例如,URL 干的段、查询字符串、POST 请求正文中的字符串、HTTP 标头中的字符串、cookie)。选择器还可以执行编程功能来分析请求中的信息。例如,选择器可以提取 POST 正文中的文本,将文本转换为列表,并从列表中提取特定项目。

有关表达式以及可以在表达式中指定的内容的更多信息,请参阅策略和表达式

使用参数而不是选择器

虽然 Citrix 建议对内容组使用选择器,但您可以改为配置点击参数和失效参数。例如,假设您在内容组中为错误报告配置了三个点击参数:BugID、颁发者和受让人。如果请求包含 BugID=456、Issuer=RohitV 和 Assignee=Robert,Citrix ADC 设备可以提供与这些参数-值对匹配的响应。

内容组中的失效参数过期缓存条目。例如,假设 BuGID 是一个失效参数,并且用户发出 POST 请求来更新错误报告。失效策略将请求定向到此内容组,内容组的失效参数将到期与 BugID 值匹配的所有缓存响应。(下次用户为此报表发出 GET 请求时,缓存策略可使 Citrix ADC 设备从源服务器刷新报表的缓存条目。)

请注意,相同的参数可用作命中参数或失效参数。

内容组按以下顺序提取请求参数:

  • 网址查询
  • POST 主体
  • 曲奇标题

参数首次出现后,无论其在请求中发生的位置如何,都将忽略其后续出现的所有事件。例如,如果 URL 查询和 POST 正文中都存在一个参数,则只考虑 URL 查询中的参数。

如果您决定对内容组使用点击和失效参数,请在配置内容组时配置参数。

注意:Citrix 建议您使用选择器而不是参数化的内容组,因为选择器更灵活,可以适应更多类型的数据。

配置选择器

内容组可以使用点击选择器检索缓存命中,也可以使用失效选择器对过期的缓存对象并从源服务器获取新的对象。

选择器包含一个名称和一个称为 高级表达式的逻辑表达式

有关高级表达式的更多信息,请参阅策略和表达式

要配置选择器,请为其分配一个名称并输入一个或多个表达式。作为最佳做法,选择器表达式应该包含 URL 干和主机,除非有充分的理由忽略它们。

使用 CLI 配置选择器

在命令提示窗口中,键入:

add cache selector \<selectorName\> ( \<rule\> ... )

有关配置表达式或表达式的信息,请参阅使用命令行界面配置选择器表达式

>add cache selector product_selector "http.req.url.query.value("ProductId")" "http.req.url.query.value("BatchNum")" "http.req.url.query.value("depotLocation")"

> add cache selector batch_selector "http.req.url.query.value("ProductId")" "http.req.url.query.value("BatchId")" "http.req.url.query.value("depotLocation")"

> add cache selector product_id_selector "http.req.url.query.value("ProductId")"

> add cache selector batchnum_selector "http.req.url.query.value("BatchNum")" "http.req.url.query.value("depotLocation")"

> add cache selector batchid_selector "http.req.url.query.value("depotLocation")" "http.req.url.query.value("BatchId")"

使用 GUI 配置选择器

导航到“优化”>“集成缓存”>“缓存选择器”,然后添加缓存选择器。

内容组

内容组是缓存对象的容器,可以在响应中提供服务。首次启用集成缓存时,可缓存的对象将存储在名为 Default 的内容组中。您可以创建具有唯一属性的新内容组。例如,您可以为图像数据、错误报告和股票报价定义单独的内容组,并且您可以将股票报价内容组配置为比其他组更频繁地刷新。

您可以配置整个内容组或内容组中选定条目的过期。

内容组中的数据可以是静态的或动态的,如下所示:

  • 静态内容组。查找请求上的 URL 干和主机名与响应的 URL 干和主机名之间的精确匹配。
  • 动态内容组。查找包含特定参数-值对、任意字符串或字符串模式的对象。当缓存频繁更新的数据(例如,错误报告或股票报价)时,动态内容组非常有用。

提供来自内容组的点击

  1. 用户输入项目的搜索条件,例如错误报告,然后单击 HTML 表单中的查找按钮。
  2. 浏览器发出一个或多个 HTTP GET 请求。这些请求包含参数(例如,错误所有者、错误 ID 等)。
  3. Citrix ADC 设备收到请求时,会搜索匹配的策略,如果找到与这些请求匹配的缓存策略,则会将请求定向到内容组。
  4. 内容组在内容组中查找适当的对象,通常基于您在选择器中配置的条件。

例如,内容组可以检索与 NameField=username 和 BugID=ID 匹配的响应。

  1. 如果找到匹配的对象,Citrix ADC 设备可以将这些对象提供给用户的浏览器,从而将这些对象组装成完整响应(例如,错误报告)。

使内容组中的对象失效

  1. 用户修改数据(例如,用户修改错误报告并单击提交按钮)。
  2. 浏览器以一个或多个 HTTP 请求的形式发送此数据。例如,它可以以多个 HTTP POST 请求的形式发送错误报告,其中包含有关错误所有者和错误 ID 的信息。
  3. Citrix ADC 设备将请求与失效策略相匹配。通常,这些策略配置为检测 HTTP POST 方法。
  4. 如果请求与失效策略匹配,Citrix ADC 设备将搜索与此策略关联的内容组,并使符合配置的失效条件的响应过期。

例如,无效选择器可以找到与 NameField=username 和 BugID=ID 匹配的响应。

  1. Citrix ADC 设备下次收到针对这些响应的 GET 请求时,它会从源服务器获取刷新的版本,缓存刷新的响应,并将这些响应提供给用户的浏览器,并将其汇编成完整的错误报告。

设置基本内容组

默认情况下,所有缓存数据都存储在默认内容组中。您可以配置其他内容组并在一个或多个策略中指定这些内容组。

您可以为静态内容配置内容组,并且必须为动态内容配置内容组。您可以修改任何内容组的配置,包括默认组。

使用命令行界面设置基本内容组

在命令提示窗口中,键入:

add cache contentgroup <name> (-hitSelector <hitSelectorName> -invalSelector <invalidationSelectorName> | -hitParams <hitParamName> -invalParams<invalidationParamName>) -type <type> [-relExpiry <sec> | -relExpiryMilliSec <msec>] [-heurExpiryParam <positiveInteger>]

add cache contentgroup Products_Details –hitSelector product_selector –invalSelector id_selector

add cache contentgroup bugrep -hitParams IssuePage RecordID Template TableId -invalParams RecordID -relExpiry 864000

使用 GUI 设置基本内容组

导航到优化”>“集成缓存”>“内容组,然后创建内容组。

过期或刷新缓存对象

如果响应没有 Expires 标头或 Cache-Control 标头具有过期时间(Max-Age 或 Smax-Age),则必须使用下列方法之一过期内容组中的对象:

  • 配置内容组过期设置以确定是否保留对象以及保留多长时间。
  • 为内容组配置失效策略和操作。有关详细信息,请参阅配置缓存和失效策略
  • 手动使内容组或其中的对象过期。

缓存的响应过期后,Citrix ADC 设备将在客户端下次发出响应请求时刷新响应。默认情况下,当缓存已满时,Citrix ADC 设备首先替换最近使用最少的响应。

下面的列表介绍了使用内容组的设置过期缓存响应的方法。通常,这些方法指定为百分比或以秒为单位:

  • 手册。手动使内容组中的所有响应或缓存中的所有响应失效。
  • 响应为基础。正面和负面响应的特定有效期间隔。仅当响应中缺少上次修改的标头时,才会考虑基于响应的过期。
  • 启发式过期。对于具有最后修改标头的响应,启发式过期指定从修改响应所花费的时间挂载(计算为当前时间减去最后修改时间,乘以启发式过期值)。例如,如果“最后修改”标头指示响应在 2 小时前更新,并且启发式过期设置为 10%,则缓存的对象在 0.2 小时后过期。此方法假定频繁更新的响应需要更频繁地过期。
  • 绝对或相对。以 HH: MM 格式、本地时间或 GMT 指定响应每天到期的准确(绝对)时间。本地时间可能不适用于所有时区。

相对过期指定从缓存未命中导致前往源服务器的行程到响应过期的秒数或毫秒数。如果以毫秒为单位指定相对过期,请输入 10 的倍数。这种过期形式适用于所有积极响应。将忽略响应中的 Last-Modified、Expires 和 Cache-Control 标头。

绝对和相对过期覆盖响应本身中的任何过期信息。

  • 正在下载。“收到完成响应后过期”选项将在响应下载后立即过期。这对于频繁更新的响应非常有用,例如股票报价。默认情况下,此选项处于禁用状态。

同时启用闪存缓存和接收完成响应后过期可加速动态应用程序的性能。启用这两个选项后,Citrix ADC 设备仅为同时请求块提取一个响应。

  • 固定。默认情况下,当缓存已满时,Citrix ADC 设备首先替换最近使用最少的响应。Citrix ADC 设备不会将此行为应用于标记为固定的内容组。

如果未为内容组配置过期设置,则以下是组中过期对象的附加选项:

  • 使用应用于内容组的 INVAL 操作配置策略。
  • 配置使用 INVAL 操作的策略时,输入内容组的名称。

如何应用过期方法

对于正面和负面响应,过期效果不同。正面和负面回复在下面提到的“正面和负面回复到期”表中描述。

以下是用于了解应用于内容组的过期方法的经验法则:

  • 您可以控制 Citrix ADC 设备在决定是否使对象过期时是否评估响应标头。
  • 绝对和相对过期会导致 Citrix ADC 设备忽略响应标头(它们会覆盖响应中的任何过期信息)。
  • 启发式过期设置以及“弱正”和“弱负”过期(配置实用程序中标记为 默认 值)会导致 Citrix ADC 设备检查响应标头。这些设置一起工作,如下所示:
    • Expires 或 Cache-Control 标头中的值将覆盖这些内容组设置。
    • 对于缺乏 Expires 或 Cache-Control 标头但具有 Last-Modified 标头的正面响应,Citrix ADC 设备将启发式过期设置与标头值进行比较。
    • 对于缺乏 Expires、Cache-Control 或 Last-Modified 标头的正响应,Citrix ADC 设备使用“弱正”值。
    • 对于缺乏 Expires 或 Cache-Control 标头的负响应,Citrix ADC 设备使用“弱负”值。

下表介绍了如何应用这些方法。

响应类型 过期标题类型 内容组设置 对象保留在缓存中的时间段
积极的 任何标题 Expire Content After (relExpiry),无其他设置 使用“内容过期后”设置的值。
积极的 任何标题 Expire Content At (absExpiry),无其他设置 从“过期内容”设置的值中减去当前日期。
积极的 任何标题 Expire Content After (relExpiry) 和 Expire content at (absExpiry) 对内容组设置使用两个值中较小的值。请参阅此表中的上一行。
积极的 最后修改(与任何其他标题) Heuristic (heurExpiry Param),带任何其他设置 从当前日期中减去上次修改的日期,将结果乘以启发式过期设置的值,然后除以 100。
积极的 最后修改(与任何其他标题) Default (positive) (weakPosRel Expiry),没有其他设置 使用默认(正数)到期设置的值。
积极的 Expires 或 Cache-Control:存在 Max-Age 标头 上次修改的标头不存在,启发式(启发式参数),默认值(正值)(弱值到期),或两者兼有 从 Expires 或 Cache-Control:Max-Ag 日期中减去当前日期。
积极的 没有缓存标头 Default (positive) (weakPosRel Expiry) 和任何其他过期设置 使用默认值(正)设置的值。
积极的 没有缓存标头 启发式(启发式参数)存在,缺省值(正值)(弱值到期)设置不存在。 如果最后修改标头不存在,则不会缓存响应或缓存为“已过期”状态。如果存在“最后修改”标题,请使用启发式过期值。
负面的 Expires 或 Cache-Control:Max-Age Expire Content After (relExpiry)、Expire Content At (absExpiry) 或两个设置 从 Expires 标头的值中减去当前日期,或使用 Cache-Control:Max-Age 标头的值。
负面的 Expires 或 Cache-Control 标头不存在 Expire Content After (relExpiry)、Expire Content At (absExpiry) 或两个设置 响应不缓存,或缓存为“已过期”状态。
负面的 Expires 或 Cache-Control:Max-Age 任何设置 从 Expires 或 Cache-Control:Max-Ag 日期中减去当前日期。
负面的 Expires 和 Cache-Control:Max-Age 标头不存在 Default (negative) (weakNegRel Expiry) 使用默认值(负值)设置。
负面的 Expires 和 Cache-Control:Max-Age 标头不存在 除 Default (negative) (weakNegRel Expiry) 以外的任何设置 对象未缓存或缓存为“已过期”状态。

通过手动方法过期内容组

您可以手动过期内容组中的所有条目。

使用命令行界面手动过期内容组中的所有响应

在命令提示窗口中,键入:

expire cache contentGroup <name>

使用 GUI 手动过期内容组中的所有响应

导航到优化”>“集成缓存”>“内容组,选择内容组,然后单击“无效”以使内容组中的所有响应过期。

使用 GUI 手动过期缓存中的所有响应

导航到优化”>“集成缓存”>“内容组,然后单击“全部无效”以使缓存中的所有响应过期。

配置内容组的定期过期

您可以配置内容组,使其对其条目执行选择性或完全过期。过期间隔可以是固定的,也可以是相对的。

使用命令行界面配置内容组过期

在命令提示窗口中,键入:

set cache contentgroup \<name> (-relExpiry|-relExpiryMilliSec|-absExpiry|-absExpiryGMT| -heurExpiryParam|-weakPosRelExpiry|-weakNegRelExpiry| -expireAtLastBye) \<expirationValue>

使用 GUI 配置内容组过期

导航到优化 > 集成缓存 > 内容组,选择内容组,然后指定过期方法。

过期单个响应

过期响应会强制 Citrix ADC 设备从源服务器获取刷新的副本。无法重新验证没有验证程序的响应(例如 ETag 或最后修改的标头)。因此,刷新这些响应具有与过期响应相同的效果。

要使静态数据的内容组中缓存响应过期,您可以指定必须与存储 URL 匹配的 URL。如果缓存的响应是参数化内容组的一部分,则必须指定组名称以及确切的 URL 干。主机名和端口号必须与缓存响应的主机 HTTP 请求标头中的相同。如果未指定端口,则假定端口 80。

使用命令行界面使内容组中的单个响应过期

在命令提示窗口中,键入:

expire cache object -url <URL> -host <hostName> [-port <port>] [-groupName<contentGroupName>] [-httpMethod GET|POST]

使用 CLI 使内容组中的单个响应过期

在命令提示符下,键入以下命令:

expire cache object -locator <positiveInteger>

使用 GUI 过期缓存响应

导航到优化 > 集成缓存 > 缓存对象,选择缓存的响应,然后过期。

使用 GUI 过期响应

导航到优化 > 集成缓存 > 缓存对象,单击 索”和,设置搜索条件以查找所需的缓存响应并过期。

内容组中的冲洗响应

您可以删除或刷新内容组中的所有响应、组中的某些响应或缓存中的所有响应。刷新缓存的响应可释放新的缓存响应的内存。

注意:

要一次刷新多个对象的响应,请使用配置实用程序方法。命令行界面不提供此选项。

使用命令行界面刷新内容组的响应

在命令提示窗口中,键入:

flush cache contentGroup <name> [-query <queryString> | [-selectorValue <selectorExpressionIDList> -host <hostName>]]

使用 GUI 刷新内容组的响应

  1. 导航到优化 > 集成缓存 > 内容组
  2. 在详细信息窗格中,按如下方式刷新响应:
    • 要刷新所有内容组中的所有响应,请单击“全部无效”,然后刷新所有响应。
    • 要刷新特定内容组中的响应,请选择内容组,单击无效,然后刷新所有响应。

注意: 如果此内容组使用选择器,则可以通过在“选择器值”文本框中输入字符串并在“主机”文本框中输入主机名来选择性地刷新响应。然后点击 刷新并确定。选择器值可以是最多 2319 个字符的查询字符串,用于参数化失效。

如果内容组使用失效参数,则可以通过在查询字段中输入字符串来选择性地刷新响应。

如果内容组使用失效参数并配置了“使属于目标主机的对象失效”,请在“查询”和“主机”字段中输入字符串。

使用命令行界面刷新缓存的响应

在命令提示窗口中,键入:

flush cache object -locator <positiveInteger> | -url <URL> -host <hostName> [-port <port>] [-groupName <contentGroupName>] [-httpMethod GET|POST]

使用 GUI 刷新缓存响应

导航到优化 > 集成缓存 > 缓存对象,选择缓存对象,然后刷新。

删除内容组

如果内容组未被任何在缓存中存储响应的策略使用,则可以删除该内容组。如果内容组绑定到策略,则必须先删除策略。删除内容组会删除该组中存储的所有响应。

您不能删除默认、基本文件或 Deltajs 组。默认组存储不属于任何其他内容组的缓存响应。

使用命令行界面删除内容组

在命令提示窗口中,键入:

rm cache contentgroup <name>

使用 GUI 删除内容组

导航到优化 > 集成缓存 > 内容组”, 选择内容组,然后删除。

配置选择器和基本内容组