ADC

配置缓存和失效策略

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

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

操作决定 NetScaler 设备在流量与策略匹配时会做什么。以下操作可用:

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

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

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

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

与集成缓存策略相关的操作

下表描述了集成缓存策略的操作。

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

为保单绑定积分

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

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

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

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

策略评估顺序

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

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

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

注意: 必须在请求时间覆盖评估期间调用 POST 数据或 Cookie 标头的请求时间策略,因为集成缓存中的内置请求时间策略返回 POST 请求的 NOCACHEMAY_NOCACHE 作和对于使用 Cookie 的请求的操作。您需要将 MAY_CACHEMAY_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]
<!--NeedCopy-->
> 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
<!--NeedCopy-->
> 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
<!--NeedCopy-->
> 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"
<!--NeedCopy-->

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

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

全局绑定集成缓存策略

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

要使用命令行界面全局绑定集成缓存策略,请执行以下操作:

在命令提示符下,键入:

bind cache global <policy> -priority <positiveInteger> [-typeREQ_OVERRIDE|REQ_DEFAULT|RES_OVERRIDE|RES_DEFAULT] [-gotoPriorityExpression <expression>] [-invoke <labelType> <labelName>]
<!--NeedCopy-->
> bind cache global myCachePolicy -priority 100 -type req_default
<!--NeedCopy-->

注意:

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

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

> bind cache global myCache Policy 200

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

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

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

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

使用 GUI 时,可以使用虚拟服务器的配置对话框绑定策略。这使您可以查看绑定到该虚拟服务器的所有 NetScaler 模块中的所有策略。还可以将 策略管理器配置 对话框用于集成缓存。这使您可以仅查看绑定到虚拟服务器的集成缓存策略。

要使用命令行界面将集成缓存策略绑定到虚拟服务器,请执行以下操作:

在命令提示符下,键入:

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

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

  • CS 虚拟服务器-导航到 Traffic Management > 内容交换 > 虚拟服务器,选择虚拟服务器,然后绑定相关缓存策略。
  • LB 虚拟服务器-导航到 Traffic Management > 负载平衡 > 虚拟服务器,选择虚拟服务器,然后绑定相关缓存策略。

使用 GUI(策略管理器方法)将集成缓存策略绑定到虚拟服务器。

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

注意: 您可以通过选择适当的绑定点将缓存策略绑定到负载平衡虚拟服务器和内容交换虚拟服务器。

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

默认情况下,可处理压缩的客户端可以使用 gzip、deflate、compress 和 pack200-gzip 格式的未压缩响应或压缩响应。如果客户端处理压缩,请求中会发送 Accept-Encoding:compression 格式标头。客户端接受的压缩类型必须与缓存对象的压缩类型匹配。例如,无法为响应带有 Accept-Encoding:deflate 标头的请求而提供 cached.gzip 文件。

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

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

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

为缓存配置策略库

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

除了通过绑定策略和分配优先级别来控制策略评估顺序(如“绑定策略”中所述),您还可以通过配置 Goto 表达式在策略库中建立流程。Gto 表达式覆盖由优先级级别确定的流。在评估当前库中的条目后,您还可以通过调用外部策略库来控制评估流程。评估完成后,评估总会返回到当前银行。

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

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

集成缓存有两个内置策略标签,您可以配置更多策略标签:

_reqBuiltInDefaults:此策略标签是从请求时间默认绑定点开始调用的。 _resBuiltInDefaults:此策略标签是从响应时间默认绑定点调用的。

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

在命令提示符下,键入:

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

要使用 GUI 调用缓存策略库中的策略标签,请执行以下操作:

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

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

注意:

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

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

在命令提示符下,键入:

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

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

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

注意:

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

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

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

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

NetScaler 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>

要使用 GUI 解除缓存策略的绑定,请执行以下操作:

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

要使用 GUI 删除策略标签调用,请执行以下操作:

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