Citrix ADC

配置缓存和失效策略

策略使集成缓存能够确定是尝试提供来自缓存还是来自源的响应。NetScaler 设备提供用于集成缓存的内置策略,您可以配置其他策略。配置策略时,请将其与操作关联。操作要么缓存策略应用到的对象,要么使对象失效(过期)。通常,您基于 GET 和 POST 请求中的信息的缓存策略。通常,您可以根据请求中是否存在 POST 方法以及其他信息来制定失效策略。您可以在缓存或失效策略中使用 GET 或 POST 请求中的任何信息。

您可以在配置实用程序中查看集成缓存的策略节点中的某些内置策略。内置策略名称以下划线 (_) 开头。

操作确定 NetScaler 设备在流量与策略匹配时执行的操作。以下操作可用:

  • 缓存操作。与 CACHE 操作关联的策略将响应存储在缓存中,并从缓存中提供响应。
  • 无效诉讼。与 INVAL 操作关联的策略立即过期缓存响应并从源服务器刷新它们。请注意,对于基于 Web 的应用程序,失效策略通常会评估 POST 请求。
  • “不缓存”操作。与 NOCACHE 操作关联的策略永远不会将对象存储在缓存中。
  • 临时缓存操作。与 MAYCACHE 或 MAYNOCACHE 操作关联的策略取决于其他策略评估的结果。

尽管集成缓存不存储 LOCK 方法指定的对象,但您可以在收到 LOCK 请求时使缓存的对象失效。仅对于失效策略,您可以使用表达式 http.req.method.eq(“lock”) 将方法指定为 LOCK。与 GET 和 POST 请求的策略不同,必须将 LOCK 方法括在引号中,因为 NetScaler 设备仅将此方法名称识别为字符串。

创建策略后,将其绑定到请求和响应的整体处理中的特定点。尽管在绑定策略之前创建策略,但在创建策略之前,您应该了解绑定点如何影响处理顺序。

绑定到特定绑定点的策略构成保单银行。您可以使用 goto 表达式修改策略库中的执行顺序。您也可以在其他策略银行中调用策略。此外,您还可以创建标签并将策略绑定到它们。此类标签不与处理点关联,但绑定到该标签的策略可以从其他策略银行调用。

要与集成缓存策略关联的操作

下表介绍了集成缓存策略的操作。

操作 规范
CACHE 如果响应尚未过期,则提供来自缓存的响应。如果必须从源服务器读取响应,NetScaler 设备会在提供响应之前缓存响应。即使是经常更新和访问的数据也可以缓存。例如,股票报价会频繁更新,但它们可以被缓存,以便可以快速提供给多个用户。如有必要,可以在下载缓存的数据后立即刷新。内置策略可覆盖缓存操作。
NOCACHE 始终从源服务器获取响应并将响应标记为不可存储。通常,您可以为敏感数据或个性化数据配置 NOCACHE 策略。
MAY_CACHE 在请求时间策略中使用此设置暂时允许将响应存储在内容组中,以待评估响应时间策略。以下是可能的:1. 如果匹配的响应时间策略具有缓存操作,但未指定内容组,则响应将存储在默认组中,除非内置策略覆盖此策略。2. 如果匹配的响应时间策略具有 CACHE 操作并指定与请求时间策略中的内容组相同的内容组,则除非内置策略覆盖此策略,否则响应将存储在指定内容组中。3. 如果匹配的响应时间策略具有 CACHE 操作,但指定的内容组与请求时间策略中的内容组不同,则会应用 NOCACHE 操作。4. 如果匹配的响应时间策略具有 NOCACHE 操作,请执行 NOCACHE 操作。5. 如果没有匹配的响应时间策略,则会应用缓存操作,除非内置策略覆盖此策略。
MAY_NOCACHE 对于请求时间策略,此设置暂时禁止缓存响应。在响应时,将执行以下操作之一:-如果没有响应时间策略匹配请求,则最终操作为 NOCACHE。-如果匹配的响应时间策略包含缓存操作,则最终操作是 CACHE,除非内置策略覆盖此策略。-如果匹配的响应时间策略包含 NOCACHE 操作,则最终操作是 NOCACHE。-如果匹配的响应时间策略具有缓存操作,但未指定内容组,则最终操作是缓存默认内容组中的响应,除非内置策略覆盖此策略。
INVAL 过期缓存的响应。根据策略和内容组的配置方式,一个或多个内容组中的所有响应都将过期,或者内容组中的选定对象将过期。注意:您只能在请求时间策略中指定 INVAL 操作。

为策略绑定点

您可以将策略绑定到以下绑定点之一:

  • 一个全球策略银行。这些是请求时间默认值、请求时间覆盖、响应时间默认值和响应时间覆盖策略库,如 “中所述策略评估顺序。“
  • 一个虚拟服务器。绑定到虚拟服务器的策略将在全局覆盖策略和全局默认策略之前进行处理,如 “中所述策略评估顺序。“ 请注意,当将策略绑定到虚拟服务器时,您可以将其绑定到请求时间或响应时间处理。
  • 临时策略标签。策略标签是分配给策略银行的名称。除了全局标签之外,集成缓存还有两个内置的自定义策略标签:
    • _reqBuiltinDefaults。默认情况下,从请求时间默认策略库调用此策略标签。
    • _resBuiltinDefaults。默认情况下,从响应时间默认策略库调用此策略标签。

您还可以定义新的策略标签。绑定到用户定义的策略标签的策略必须从策略库内为其中一个内置绑定点调用。

重要提示: 您应将具有 INVAL 操作的策略绑定到请求时间覆盖或响应时间覆盖绑定点。要删除策略,您必须先取消绑定。

策略评价的顺序

要使高级策略生效,您必须确保在 NetScaler 设备处理流量期间的某个时间点调用该策略。要指定调用时间,请将策略与绑定点关联。以下是按评估顺序列出的绑定点:

  • 请求时间覆盖。如果请求与请求时间覆盖策略匹配,则默认情况下,请求时间策略评估结束,NetScaler 设备存储与匹配策略关联的操作。
  • 请求时间负载平衡虚拟服务器。如果在评估所有请求时间覆盖策略后无法完成策略评估,NetScaler 设备将处理绑定到负载平衡虚拟服务器的请求时间策略。如果请求与其中一个策略匹配,则将结束评估,NetScaler 设备将存储与匹配策略关联的操作。
  • 请求时间内容切换虚拟服务器。绑定到此绑定点的策略在绑定到虚拟服务器负载平衡的请求时间策略之后进行评估。
  • 请求时间默认值。如果在所有请求时间之后无法完成策略评估,并评估特定于虚拟服务器的策略,NetScaler 设备将处理请求时间默认策略。如果请求与请求时间默认策略匹配,则默认情况下,请求时间策略评估结束,NetScaler 设备存储与匹配策略关联的操作。
  • 响应时间覆盖。类似于请求时间覆盖策略评估。
  • 响应时间负载平衡虚拟服务器。类似于请求时虚拟服务器策略评估。
  • 响应时间内容切换虚拟服务器。类似于请求时虚拟服务器策略评估。
  • 默认响应时间。类似于请求时间默认策略评估。

您可以将多个策略与每个绑定点关联。要控制与绑定点关联的策略的评估顺序,请配置优先级别。如果没有任何其他流控制信息,则根据优先级级别对策略进行评估,从最低数字优先级值开始。

评估所有集成缓存策略后,如果在请求时间和响应时间策略中指定了冲突的操作。“

注意:必须在请 求时间覆盖评估期间调用 POST 数据或 cookie 标头的请求时间策略,因为集成缓存中的内置请求时间策略对 POST 请求返回 NOCACHE 操作,对于使用 Cookie 的请求返回 MAY_NOCACHE 操作。请注意,您将 MAY_CACHE 或 MAY_NOCACHE 操作与指向参数化内容组的请求时间策略相关联。响应时间策略确定事务是否存储在缓存中。

在集成缓存中配置策略

配置新策略以处理内置策略无法处理的数据。可以配置单独的策略用于缓存、防止进行缓存及使缓存数据无效。以下是集成缓存策略的主要组成部分:

  • 规则:用于评估 HTTP 请求或响应的逻辑表达式。
  • 操作:将策略与操作关联,以确定如何处理与策略规则匹配的请求或响应。

内容组:将策略与一个或多个内容组关联,以确定要执行操作的位置。

使用命令行接口配置缓存策略

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

add cache policy <policyName> -rule <expression> -actionCACHE|MAY_CACHE|NOCACHE|MAY_NOCACHE [-storeInGroup <contentGroupName>] [-undefAction NOCACHE|RESET] > add cache policy image_cache -rule "http.req.url.contains(\"jpg\") || http.req.url.contains(\"jpeg\")" -action CACHE -storeingroup myImages_group -undefaction NOCACHE

> add cache policy bugReportPolicy -rule "http.req.url.query.contains(\"IssuePage\")" -action CACHE -storeInGroup bugReportGroup

> add cache policy my_form_policy -rule "http.req.header(\"Host\")contains(\"my.company.com\") && http.req.method.eq(\"GET\") && http.req.url.query.contains(\"v=7\")" -action CACHE -storeInGroup my_form_event

> add cache policy viewproducts_policy –rule "http.req.url.contains(\"viewproducts.aspx\")" –action CACHE -storeInGroup Product_Details

使用命令行界面配置失效策略

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

add cache policy <policyName> -rule <expression> -action INVAL [-invalObjects "\<contentGroupName1>[,<selectorName1>"]. . .]] | [-invalGroup \<contentGroupName1>[, <contentGroupName2>. . .]] [-undefAction NOCACHE|RESET]

> add cache policy invalidation_events_policy -rule "http.req.header("Host")contains("my.company.com") && http.req.method.eq("GET") && http.req.url.query.contains("v=8") -action INVAL -invalObjects my_form_event -undefaction NOCACHE

> add cache policy inval_all -rule "http.req.method.eq("POST") && http.req.url.contains("jpeg")" -action INVAL -invalGroups myImages_group myApps_group PDF_group

> add cache policy bugReportInvalidationPolicy -rule "http.req.url.query.contains(\"TransitionForm\")" -action INVAL -invalObjects bugReport > add cache policy editproducts_policy –rule "http.req.url.contains(\"editproducts.aspx\")" –action INVAL -invalObjects "Product_Details,batchnum_sel" "Products_In_Depots,batchid_sel"

使用 GUI 配置缓存或失效策略

导航到优化 > 集成缓存 > 略”,然后创建新策略。

全局绑定集成缓存策略

当您全局绑定策略时,该策略可供 NetScaler 设备上的所有虚拟服务器使用。

使用命令行界面全局绑定集成缓存策略

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

bind cache global <policy> -priority <positiveInteger> [-typeREQ_OVERRIDE|REQ_DEFAULT|RES_OVERRIDE|RES_DEFAULT] [-gotoPriorityExpression <expression>] [-invoke <labelType> <labelName>]

> bind cache global myCachePolicy -priority 100 -type req_default

注意

对于全局绑定策略,类型参数是可选的,以保持与您使用早期版本的 NetScaler 设备定义的策略的向后兼容性。如果省略类型,则策略将绑定到 REQ_DEFAULT 或 RES_DEFAULT,具体取决于策略规则是响应时间还是请求时间表达式。如果规则同时包含请求时间和响应时间参数,则该规则将绑定到 RES_DEFAULT。以下是一个绑定的示例,该绑定省略类型

以下是省略类型的绑定示例。

> bind cache global myCache Policy 200

使用配置实用程序全局绑定集成缓存策略

导航到优化 > 集成缓存,单击缓存策略管理器,并通过指定相关绑定点和连接类型(请求/响应)来绑定策略。

将集成缓存策略绑定到虚拟服务器

将策略绑定到虚拟服务器时,该策略仅适用于与策略匹配且流经相关虚拟服务器的请求和响应。

使用配置实用程序时,您可以使用虚拟服务器的配置对话框绑定策略。这使您能够查看绑定到此虚拟服务器的所有 NetScaler 模块中的所有策略。您还可以使用“策略管理器”配置对话框进行集成缓存。这使您可以仅查看绑定到虚拟服务器的集成缓存策略。

使用命令行界面将集成缓存策略绑定到虚拟服务器

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

  • bind lb vserver <name>@ -policyName <policyName> -priority <positiveInteger> -type(REQUEST|RESPONSE)
  • bind cs vserver <name>@ -policyName <policyName> -priority <positiveInteger> -type(REQUEST|RESPONSE)

使用配置实用程序(虚拟服务器方法)将集成缓存策略绑定到虚拟服务器

  • CS 虚拟服务器-导航至流量管理 > 内容交换 > 虚拟服务器,选择虚拟服务器并绑定相关缓存策略。
  • LB 虚拟服务器-导航至流量管理 > 负载平衡 > 虚拟服务器,选择虚拟服务器并绑定相关缓存策略。

使用配置实用程序(策略管理器方法)将集成缓存策略绑定到虚拟服务器

导航到优化 > 集成缓存,单击缓存策略管理器,然后通过指定相关的绑定点和连接类型来绑定缓存策略。

注意 您可以通过选择适当的绑定点将缓存策略绑定到 LB 虚拟服务器和 CS 虚拟服务器。

如何缓存压缩和未压缩的文件版本

默认情况下,可处理压缩的客户端可以使用 gzip、deflate、compress 和 pack200-gzip 格式的未压缩响应或压缩响应。如果客户端处理压缩,则会在请求中发送“接受编码:压缩格式标头”。客户端接受的压缩类型必须与缓存对象的压缩类型匹配。例如,缓存的 .gzip 文件不能用于响应具有 Accept-Encoding:deflate 标头的请求。

如果压缩了缓存响应,则无法处理压缩的客户端将提供缓存未命中。

对于动态缓存,您需要配置两个内容组,一个用于压缩数据,另一个用于同一数据的未压缩版本。下面是配置选择器、内容组和策略的示例,以便将缓存中的未压缩文件提供给无法处理压缩的客户端,并将相同文件的压缩版本提供给可处理压缩的客户端

add cache selector uncompressed_response_selector http.req.url "http.req.header(\"Host\")"

add cache contentGroup uncompressed_group -hitSelector uncompressed_responst_selector -invalSelector uncomp_resp_sel

add cache policy cache_uncompressed -rule "HTTP.REQ.URL.CONTAINS(\"xyz\") && !HTTP.REQ.HEADER(\"Accept-Encoding\").EXISTS" -action CACHE -storeInGroup uncompressed_group

bind cache global cache_uncompressed -priority 100 -gotoPriorityExpression END -type REQ_OVERRIDE

add cache selector compressed_response_selector HTTP.REQ.URL "HTTP.REQ.HEADER(\"Host\")" "HTTP.REQ.HEADER(\"Accept-Encoding\")"

add cache contentGroup compressed_group -hitSelector compressed_response_selector

add cache policy cache_compressed -rule "HTTP.REQ.URL.CONTAINS(\"xyz\") && HTTP.REQ.HEADER(\"Accept-Encoding\").EXISTS" -action CACHE -storeInGroup compressed_group

bind cache global cache_compressed -priority 200 -gotoPriorityExpression END -type REQ_OVERRIDE

为缓存配置策略库

与特定绑定点关联的所有策略统称为策略库。除了为银行中的策略配置优先级别外,您还可以通过配置 Gto 表达式来修改银行中的评估顺序。您可以通过从当前策略库中调用外部策略银行来进一步修改评估顺序。您还可以配置新的策略库,为其分配自己的标签。由于此类保单银行不受处理周期的任何一个点的约束,因此它们只能从其他保单银行内部调用。为方便起见,其标签与内置绑定点不对应的策略银行称为策略标签。

除了通过绑定策略并指定优先级级别(如绑定策略”” “中所述)来控制策略评估的顺序之外,您还可以通过配置转到表情。Gto 表达式覆盖由优先级级别确定的流。您还可以通过在评估当前银行中的条目后调用外部策略银行来控制评估流程。评估结束后,评估总是返回到当前库。

下表汇总了用于控制策略库中的评估的条目。

属性 说明
名称 策略的名称,或者在不评估策略的情况下调用其他策略银行的关键字 NOPOLICY。您可以在策略库中多次指定 NOPOLICY,但只能指定一次命名策略。
优先级 整数。整数越低,优先级越高。
转到表达式 确定要评估的下一个策略或策略库。您可以提供以下值之一:1. NEXT:转到具有下一个更高优先级的策略。2. END:停止评估。3. USE_INVOCATION_RESULT:如果此条目调用另一个保单银行,则适用。如果被调用的库中的最后一个 Goto 的值为 END,则评估将停止。如果最终的 Gto 是 END 以外的任何东西,则当前的策略银行执行 NEXT。4. 正数:待评估的下一个策略的优先级号. 5. 数值表达式:生成要求评估的下一个策略的优先级号的表达式。Gto 只能在保单银行继续进行。省略 Goto 表达式与指定 END 相同。
调用类型 指定策略银行类型。该值可以是以下内容之一-1。请求虚拟服务器:调用与虚拟服务器关联的请求时间策略。2. 响应虚拟服务器:调用与虚拟服务器关联的响应时间策略。3. 策略标签:调用另一个策略银行,由该银行的策略标签标识。
调用名称 虚拟服务器或策略标签的名称,具体取决于您为调用类型指定的值。

集成缓存具有两个内置策略标签,您可以配置其他策略标签:

_reqBuiltinDefaults:从请求时默认绑定点调用此策略标签。 _resBuiltInDefaults:从响应时间默认绑定点调用此策略标签。

使用命令行界面调用缓存策略库中的策略标签

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

bind cache policylabel <labelName> -policname<policyName> -priority<priority> [-gotoPriorityExpression <gotopriorityExpression>] [-invoke <labelType> <labelName>]

使用 GUI 调用缓存策略库中的策略标签

  1. 导航到优化 > 集成缓存,单击缓存策略管理器,然后指定相关绑定点(覆盖全局或默认全局)和连接类型,以查看绑定到此绑定点的策略列表。

  2. 如果要在不评估策略的情况下调用策略标签,请单击 NOPOLICY

注意

要调用外部策略库,请单击“Invoke Type”列中的字段,然后选择要在策略库中此时调用的策略库的类型。这可以是全局标签或虚拟服务器库。在“调用名称”字段中,输入标签或虚拟服务器名称。

使用命令行界面调用虚拟服务器策略库中的缓存策略标签

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

  • bind lb vserver <name>@ -policyName <policyName>|<NOPOLICY-CACHE> -priority<positiveInteger> -gotoPriorityExpression <expression> -type REQUEST|RESPONSE -invoke<labelType> <labelName>
  • bind cs vserver <name> -policyName <policyName>|<NOPOLICY-CACHE> -priority<positiveInteger> -gotoPriorityExpression <expression> -type REQUEST|RESPONSE -invoke<labelType> <labelName>

使用 GUI 调用虚拟服务器策略库中的缓存策略标签

  1. 导航至流量管理 > 负载均衡/内容切换 > 虚拟服务器,选择虚拟服务器,然后单击策略
  2. 如果您正在配置此库中的现有条目,请跳过此步骤。如果您要向此策略银行添加新策略,或者您想要使用“虚拟”NOPOLICY 条目,请单击添加并执行以下操作之一:
    • 要配置新策略,请单击缓存并配置新策略,如中所述在集成缓存中配置策略
    • 要在不处理策略规则的情况下调用策略库,请选择 NOPOLICY-CACHEoption。

注意

要调用外部策略库,请单击“Invoke Type”列中的字段,然后选择要在策略库中此时调用的策略库的类型。这可以是全局标签或虚拟服务器库。在“调用名称”字段中,输入标签或虚拟服务器名称。

在集成缓存中配置策略标签

除了在策略库中为其中一个内置绑定点或虚拟服务器配置策略外,您还可以为这些新标签创建缓存策略标签并配置策略库。

集成缓存的策略标签只能从可以在集成缓存详细信息窗格的策略管理器中查看的绑定点之一(请求覆盖、请求默认值、响应覆盖或响应默认值)或内置策略标签 _reqBuiltinDefaults 和 _resBuiltinDefaults。与策略不同,您可以调用策略标签的次数不同,策略只能调用一次。

Citrix ADC GUI 提供了一个用于重命名策略标签的选项。重命名策略标签不会影响绑定到标签的策略的评估过程。

注意

您可以使用 NOPOLICY“虚拟”策略从其他策略银行调用任何策略标签。NOPOLICY 条目是一个不处理规则的占位符。

使用命令行界面配置用于缓存的策略标签

在命令提示符下,键入以下命令以创建策略标签并验证配置:

  • add cache policylabel <labelName> -evaluates (REQ|RES)
  • show cache policylabel <labelName>

从策略银行调用此策略标签。

使用 GUI 配置用于缓存的策略标签

导航到优化 > 集成缓存 > 策略标签,添加策略标签,然后绑定缓存的策略。

注意: 要确保 NetScaler 在正确的时间处理策略标签,请在与内置绑定点关联的策略库之一中配置此标签的调用。

使用 GUI 重命名策略标签

导航到优化 > 集成缓存 > 策略标签,选择策略标签,然后重命名。

取消绑定并删除集成缓存策略和策略标签

您可以从策略银行取消绑定策略,并可以将其删除。要删除策略,您必须先取消绑定。您还可以删除策略标签调用和删除策略标签。要删除策略标签,必须首先删除为标签配置的所有调用。

您无法取消绑定或删除内置绑定点的标签(请求默认值、请求覆盖、响应默认值和响应覆盖)。

使用命令行界面取消绑定全局缓存策略

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

unbind cache global <policy>

使用命令行界面取消绑定特定于虚拟服务器的缓存策略

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

(unbind lb vserver|unbind cs vserver) <vserverName> -policyName <policyName> -type(REQUEST|RESPONSE)

使用命令行界面删除缓存策略

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

rm cache policy <policyName>

使用配置实用程序取消绑定缓存策略

导航到优化 > 集成缓存,单击缓存策略管理器,然后通过指定相关绑定点和连接类型(请求/响应)来取消绑定策略。

使用配置实用程序删除策略标签调用

  1. 导航到优化 > 集成缓存,单击缓存策略管理 器”,然后指定相关的必应点(LB 虚拟服务器或 CS 虚拟服务器)和连接类型,以查看绑定到此虚拟服务器的缓存策略列表。
  2. 在策略“Invoke”列中,清除该条目。