配置缓存和失效策略
策略使集成缓存能够确定是尝试从缓存还是从原点提供响应。NetScaler设备为集成缓存提供了内置策略,您可以配置更多的策略。当您配置策略时,您将其与操作相关联。动作要么缓存策略应用的对象,要么使对象失效(过期)。通常,缓存策略基于GET和POST请求中的信息。您通常根据请求中POST方法的存在以及其他信息来制定失效策略。您可以在缓存或失效策略中使用GET或POST请求中的任何信息。
您可以在配置实用工具中的集成缓存的policies节点中查看一些内置策略。内置策略名称以下划线(_)开头。
动作决定当流量匹配策略时NetScaler设备做什么。可执行以下操作:
- 缓存行为.与CACHE操作关联的策略将响应存储在缓存中,并从缓存中提供响应。
- 无效的行为.与INVAL操作关联的策略会立即使缓存的响应过期,并从源服务器刷新它们。对于基于web的应用程序,无效策略通常评估POST请求。
- “不缓存”操作.与NOCACHE操作关联的策略永远不会在缓存中存储对象。
- 临时缓存动作.与MAYCACHE或MAYNOCACHE操作关联的策略取决于更多策略评估的结果。
虽然集成缓存不存储LOCK方法指定的对象,但您可以在接收到锁
请求。仅对于无效策略,可以指定锁
作为一个方法,通过使用表达式http.req.method.eq(“锁”)
.不像政策得到
而且帖子
请求时,必须将LOCK方法括在引号中,因为NetScaler设备只能将此方法名称识别为字符串。
创建策略后,将其绑定到请求和响应整体处理中的一个特定点。尽管在绑定策略之前创建了策略,但在创建策略之前,必须了解绑定点如何影响处理顺序。
绑定到特定绑定点的策略构成了策略库。可以使用goto表达式修改策略库中的执行顺序。您还可以调用其他策略银行中的策略。此外,您还可以创建标签,并将策略绑定到标签上。这样的标签不与处理点相关联,但是可以从其他策略银行调用绑定到它的策略。
与集成缓存策略相关联的操作
下表描述了集成缓存策略的操作。
行动 | 规范 |
---|---|
缓存 | 如果响应未过期,则从缓存提供响应。如果必须从源服务器获取响应,NetScaler设备将在提供响应之前缓存响应。即使是频繁更新和访问的数据也可以缓存。例如,股票报价是经常更新的,但是它们可以被缓存,以便能够快速地提供给多个用户。如有必要,可以在下载后立即刷新缓存数据。缓存操作可以被内置策略覆盖。 |
NOCACHE | 始终从源服务器获取响应,并将响应标记为不可存储。通常需要为敏感或个性化的数据配置NOCACHE策略。 |
MAY_CACHE | 在请求时策略中使用此设置,可以暂时将响应存储在内容组中,等待响应时策略的评估。以下是可能的:1。如果匹配的响应时间策略具有CACHE操作但没有指定内容组,则响应将存储在Default组中,除非内置策略覆盖此策略。2.如果匹配的响应时策略具有CACHE操作,并指定与请求时策略中的内容组相同的内容组,则响应将存储在命名的内容组中,除非内置策略覆盖此策略。3.如果匹配的响应时策略具有CACHE操作,但指定的内容组与请求时策略中的内容组不同,则应用NOCACHE操作。4.如果匹配的响应时间策略有NOCACHE动作,则执行NOCACHE动作。5. If there is no matching response-time policy, a CACHE action is applied, unless a built-in policy overrides this policy. |
MAY_NOCACHE | 对于请求时策略,此设置暂时阻止缓存响应。在响应时,将执行以下操作之一:—如果没有匹配请求的响应时策略,则最终操作为NOCACHE。—如果匹配的响应时间策略包含CACHE动作,则最终动作为CACHE,除非内置策略覆盖此策略。—如果匹配的响应时间策略中包含NOCACHE动作,则最终动作为NOCACHE。-如果匹配的响应时间策略有CACHE动作但没有指定内容组,则最终动作是将响应缓存到Default内容组中,除非内置策略覆盖此策略。 |
INVAL | 缓存响应过期。根据策略和内容组的配置方式,一个或多个内容组中的所有响应都会过期,或者内容组中的选定对象会过期。注意:您只能在请求时策略中指定INVAL操作。 |
为策略绑定点
您可以将策略绑定到以下绑定点之一:
- 全球政策银行.这些策略包括请求时默认策略、请求时覆盖策略、响应时默认策略和响应时覆盖策略,如“政策评价顺序.”
- 虚拟服务器.绑定到虚拟服务器的策略在全局覆盖策略之后、全局默认策略之前处理,如“政策评价顺序当将策略绑定到虚拟服务器时,您将其绑定到请求时处理或响应时处理。
- 一个特别的策略标签.策略标签是分配给策略银行的名称。除了全局标签,集成缓存还有两个内置的自定义策略标签:
- _reqBuiltinDefaults。默认情况下,从请求时默认策略库调用此策略标签。
- _resBuiltinDefaults。默认情况下,从响应时默认策略库调用此策略标签。
您还可以定义新的策略标签。绑定到用户定义策略标签的策略必须从策略银行内为一个内置绑定点调用。
重要的是:必须将具有INVAL操作的策略绑定到请求时重写或响应时重写绑定点。要删除策略,必须先解除绑定。
政策评价顺序
为了使高级策略生效,必须确保在NetScaler设备处理流量期间的某个时刻调用该策略。要指定调用时间,可以将策略与绑定点关联。以下是绑定点,按求值顺序排列:
- 请求时覆盖.如果请求与请求时覆盖策略匹配,默认情况下,请求时策略计算结束,NetScaler设备存储与匹配策略关联的操作。
- 请求时负载均衡虚拟服务器.如果在评估了所有请求时覆盖策略之后还不能完成策略评估,NetScaler设备将处理绑定到负载平衡虚拟服务器的请求时策略。如果请求匹配这些策略之一,则计算结束,NetScaler设备存储与匹配策略相关联的操作。
- 请求时内容切换虚拟服务器.绑定到此绑定点的策略在绑定到负载平衡虚拟服务器的请求时策略之后进行评估。
- 请求时默认.如果在所有请求时的特定于虚拟服务器的策略评估完成后,策略评估仍不能完成,NetScaler设备将处理请求时的默认策略。如果请求与请求时默认策略匹配,默认情况下,请求时策略计算结束,NetScaler设备存储与匹配策略关联的操作。
- 响应时间覆盖.类似于请求时重写策略评估。
- 响应时负载均衡虚拟服务器.类似于请求时虚拟服务器策略评估。
- 响应时内容切换虚拟服务器.类似于请求时虚拟服务器策略评估。
- 响应时间违约.类似于请求时默认策略计算。
您可以将多个策略与每个绑定点关联。要控制与绑定点关联的策略的评估顺序,可以配置优先级级别。在没有其他流控信息的情况下,策略按照优先级进行评估,从优先级数值最低的开始评估。
注意:POST数据或cookie报头的请求时策略必须在请求时覆盖评估期间调用,因为集成缓存中的内置请求时策略返回一个
NOCACHE
操作POST请求和一个MAY_NOCACHE
对带有cookie的请求的操作。你会联想到MAY_CACHE
或MAY_NOCACHE
具有指向参数化内容组的请求时策略的操作。响应时间策略决定事务是否存储在缓存中。
配置集成缓存策略
您可以配置新的策略来处理内置策略无法处理的数据。您可以为缓存、防止发生缓存和使缓存数据无效配置不同的策略。以下是集成缓存策略的主要组件:
- 规则:计算HTTP请求或响应的逻辑表达式。
- 操作:将策略与操作相关联,以确定如何处理匹配策略规则的请求或响应。
内容组:将策略与一个或多个内容组关联起来,以确定将在何处执行操作。
使用命令行接口配置缓存策略
在命令提示符下,输入:
add cache policy
>添加缓存策略image_cache -rule "http.req.url.contains(\"jpg\") || http.req.url.contains(\"jpeg\")"-action CACHE -storeingroup myImages_group -undefaction NOCACHE
添加缓存策略bugReportPolicy -rule "http.req.url.query.contains(\"IssuePage\")"-action CACHE -storeInGroup bugReportGroup .使用实例
>添加缓存策略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
添加缓存策略viewproducts_policy -rule "http.req.url.contains(\"viewproducts.aspx\")"-action CACHE -storeInGroup Product_Details
使用命令行接口配置失效策略
在命令提示符下,输入:
add cache policy -rule -action INVAL [-invalObjects "\[,"]. .]] | [-invalGroup \[,< contentGroupName2>.]] [-undefAction NOCACHE|RESET]
>添加缓存策略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
添加缓存策略inval_all -rule "http.req.method.eq("POST") && http.req.url.contains("jpeg")"-action invalgroups myImages_group myApps_group PDF_group
添加缓存策略bugReportInvalidationPolicy -rule "http.req.url.query.contains(\"TransitionForm\")"-action invalobjects bugReport ' ' >添加缓存策略editproducts_policy -rule "http.req.url.contains(\"editproducts.aspx\")"-action INVAL -invalObjects "Product_Details,batchnum_sel" "Products_In_Depots, batchi_sel "
使用GUI配置缓存或无效策略
导航到优化>集成缓存>政策,并创建新策略。
全局绑定集成缓存策略
当您全局绑定策略时,它对NetScaler设备上的所有虚拟服务器都是可用的。
使用实例通过命令行接口全局绑定集成缓存策略。
在命令提示符下,输入:
bind cache global -priority [- typeeq_override |REQ_DEFAULT|RES_OVERRIDE|RES_DEFAULT] [-gotoPriorityExpression ] [-invoke ]
绑定缓存全局myCachePolicy -type req_default
注意:
type参数对于全局绑定策略是可选的,以保持与使用NetScaler设备早期版本定义的策略的向后兼容性。如果省略该类型,则策略将绑定到REQ_DEFAULT或RES_DEFAULT,这取决于策略规则是响应时表达式还是请求时表达式。如果规则同时包含请求时间和响应时间参数,则它将绑定到RES_DEFAULT。下面是省略类型的绑定示例
下面是省略类型的绑定示例。
>绑定全局myCache策略200
使用配置实用程序全局绑定集成缓存策略
导航到优化>集成缓存,点击缓存策略管理器并通过指定相关的绑定点和连接类型(请求/响应)来绑定策略。
将集成缓存策略绑定到虚拟服务器
当您将策略绑定到虚拟服务器时,它仅对匹配策略并流经相关虚拟服务器的请求和响应可用。
使用图形化界面时,可以通过虚拟服务器的配置对话框绑定策略。这使您可以查看绑定到该虚拟服务器的所有Citrix ADC模块的所有策略。你也可以使用策略管理器配置集成缓存的对话框。这使您可以只查看绑定到虚拟服务器的集成缓存策略。
使用实例通过命令行将集成缓存策略绑定到虚拟服务器。
在命令提示符下,输入:
bind lb vserver @ -policyName -priority -type(REQUEST|RESPONSE)
bind cs vserver @ -policyName -priority -type(REQUEST|RESPONSE)
使用配置实用工具(虚拟服务器方法)将集成缓存策略绑定到虚拟服务器
- CS虚拟服务器-导航到流量管理>内容交换>虚拟服务器,选择虚拟服务器,并绑定相应的缓存策略。
- LB虚拟服务器-导航到流量管理>负载均衡>虚拟服务器,选择虚拟服务器,并绑定相应的缓存策略。
使用GUI(策略管理器方法)将集成缓存策略绑定到虚拟服务器。
导航到优化>集成缓存,点击缓存策略管理器,并通过指定绑定点和连接类型来绑定缓存策略。
注意:通过选择适当的绑定点,可以将缓存策略绑定到负载均衡虚拟服务器和内容切换虚拟服务器。
如何缓存文件的压缩和未压缩版本
默认情况下,可以为能够处理压缩的客户端提供未压缩的响应或gzip、deflate、compress和pack200-gzip格式的压缩响应。如果客户端处理压缩,则一个接受编码:压缩
格式头在请求中发送。客户端接受的压缩类型必须与缓存对象的压缩类型匹配。例如,cached.gzip
属性的请求不能响应文件接受编码:缩小
头。
如果缓存的响应被压缩,那么不能处理压缩的客户端就会出现缓存丢失。
对于动态缓存,需要配置两个内容组,一个用于压缩数据,另一个用于相同数据的未压缩版本。下面是一个配置选择器、内容组和策略的示例,用于将缓存中的未压缩文件提供给无法处理压缩的客户端,以及将相同文件的压缩版本提供给可以处理压缩的客户端。
添加缓存选择器uncompressed_response_selector http.req.url "http.req.header(\"Host\")"
添加缓存内容组uncompressed_group -hitSelector uncompressed_responst_selector -invalSelector uncomp_resp_sel
添加缓存策略cache_uncompressed -rule "HTTP.REQ.URL.CONTAINS(\"xyz\") && !-action CACHE -storeInGroup uncompressed_group
bind cache global cache_uncompressed -priority 100 -gotoPriorityExpression结束-type REQ_OVERRIDE
HTTP.REQ.URL "HTTP.REQ.HEADER(\"Host\")"“HTTP.REQ.HEADER(\“接受编码\”)”
添加缓存内容组compressed_group
添加缓存策略cache_compressed -rule "HTTP.REQ.URL.CONTAINS(\"xyz\") && HTTP.REQ.HEADER(\"Accept-Encoding\")" -action CACHE -storeInGroup compressed_group .
bind cache global cache_compressed -priority 200 -gotoPriorityExpression结束-type REQ_OVERRIDE
配置缓存策略库
与特定绑定点相关联的所有策略统称为策略库。除了配置银行中策略的优先级级别外,还可以通过配置Goto表达式修改银行中策略的评估顺序。您可以通过从当前策略组内部调用外部策略组来进一步修改评估顺序。您还可以配置新的策略库,并为其分配自己的标签。由于此类政策银行没有绑定到处理周期中的任何点,因此只能从其他政策银行内部调用它们。为方便起见,标签不对应于内置绑定点的策略库称为策略标签。
除了通过绑定策略和分配优先级来控制策略评估的顺序外,如“具有约束力的政策,您可以通过配置Goto表达式在一组策略中建立流。Goto表达式将覆盖由优先级级别决定的流。您还可以在评估当前银行中的一个条目之后,通过调用外部策略银行来控制评估流。在评估完成后,评估总是返回到当前银行。
下表总结了政策银行中控制评估的条目。
属性 | 指定 |
---|---|
的名字 | 策略的名称,或者在不评估策略的情况下调用另一个策略银行,使用关键字NOPOLICY。在策略组中可以多次指定NOPOLICY,但只能指定一次命名策略。 |
优先级 | 一个整数。整数越小,优先级越高。 |
转到表达式 | 确定要评估的下一个策略或策略银行。您可以选择以下值之一:1.单击“确定”。NEXT:转到优先级次高的策略。2.结束:停止计算。3.USE_INVOCATION_RESULT:如果此条目调用另一个策略库,则适用。如果被调用银行中的最终Goto值为END,则计算停止。如果最终的Goto不是END,则当前策略银行执行NEXT。4. Positive number: Priority number of the next policy to be evaluated. 5. Numeric expression: Expression that produces the priority number of the next policy to be evaluated. The Goto can only proceed forward in a policy bank. Omitting the Goto expression is the same as specifying END. |
调用类型 | 指定策略银行类型。取值为:- 1。请求虚拟服务器:调用与虚拟服务器关联的请求时策略。2.响应虚拟服务器:调用与虚拟服务器关联的响应时策略。3.策略标签:调用另一个策略银行,由该银行的策略标签标识。 |
调用的名称 | 虚拟服务器或策略标签的名称,具体取决于您为“调用类型”指定的值。 |
集成缓存有两个内置的策略标签,您可以配置更多的策略标签:
_reqBuiltInDefaults
:从请求时默认绑定点调用此策略标签。_resBuiltInDefaults
:从响应时默认绑定点调用此策略标签。
使用命令行接口调用缓存策略库中的策略标签
在命令提示符下,输入:
绑定cache policylabel - policyName -priority [-gotoPriorityExpression ] [-invoke ]
使用GUI调用缓存策略库中的策略标签。
导航到优化>集成缓存,点击缓存策略管理器,并指定相关的绑定点(覆盖全局或默认全局)和连接类型,以查看绑定到此绑定点的策略列表。
如果要调用策略标签而不评估策略,请单击NOPOLICY.
注意:
要调用外部策略银行,单击invoke Type列中的字段,并选择您此时想要在策略银行中调用的策略银行类型。这可以是一个全局标签或虚拟服务器库。在Invoke Name字段中,输入标签或虚拟服务器名称。
使用命令行接口调用虚拟服务器策略库中的缓存策略标签
在命令提示符下,输入:
bind lb vserver @ -policyName | -priority -gotoPriorityExpression -type REQUEST|RESPONSE -invoke
bind cs vserver -policyName | -priority -gotoPriorityExpression -type REQUEST|RESPONSE -invoke
使用GUI调用虚拟服务器策略库中的缓存策略标签
- 导航到交通管理>负载均衡/内容切换>虚拟服务器,选择虚拟服务器,单击政策.
- 如果您正在配置这个银行中的一个现有条目,请跳过此步骤。如果要向此策略库添加新策略,或者希望使用“虚拟”NOPOLICY条目,请单击添加然后做以下其中一件事:
- 如需配置新策略,请单击“Cache”,并参考在集成缓存中配置策略.
- 若要调用策略库而不处理策略规则,请选择
NOPOLICY-CACHE
选择。
注意:
要调用外部策略银行,单击invoke Type列中的字段,并选择您此时想要在策略银行中调用的策略银行类型。这可以是一个全局标签或虚拟服务器库。在Invoke Name字段中,输入标签或虚拟服务器名称。
在集成缓存中配置策略标签
除了在策略组中为一个内置绑定点或虚拟服务器配置策略外,还可以为这些新标签创建缓存策略标签并配置策略组。
的策略管理器中可以查看的绑定点之一,只能从该绑定点调用集成缓存的策略标签集成缓存详细信息窗格(请求覆盖、请求默认、响应覆盖或响应默认)或内置策略标签\ _reqBuiltinDefaults
而且\ _resBuiltinDefaults
.您可以调用策略标签的任意次数,而策略只能调用一次。
Citrix ADC GUI提供了重命名策略标签的选项。重命名策略标签不会影响对绑定到该标签上的策略的评估过程。
请注意:
您可以使用
NOPOLICY
“假”政策,援引其他政策银行的任何政策标签。的NOPOLICY
条目是不处理规则的占位符。
使用命令行接口为缓存配置策略标签
在命令提示符下,输入以下命令创建策略标签并验证配置:
add cache policylabel
- (REQ|RES) show cache policylabel
.使用实例
从策略银行调用此策略标签。
使用实例GUI方式配置缓存策略标签。
导航到优化>集成缓存>政策的标签,添加策略标签,并绑定缓存的策略。
注意:要确保Citrix ADC在正确的时间处理策略标签,请在与内置绑定点关联的策略库之一中配置此标签的调用。
使用实例GUI方式重命名策略标签。
导航到优化>集成缓存>政策的标签选择策略标签,并重命名。
解绑定和删除集成缓存策略和策略标签
您可以解除策略与策略银行的绑定,也可以删除策略。若要删除策略,必须先解除绑定。还可以删除策略标签调用和删除策略标签。要删除策略标签,必须首先删除为标签配置的所有调用。
不能取消或删除内置绑定点(请求默认、请求重写、响应默认和响应重写)的标签。
使用命令行接口解除全局缓存策略的绑定
在命令提示符下,输入:
取消全局缓存
使用命令行接口解除与特定于服务器的虚拟缓存策略的绑定
在命令提示符下,输入:
(unbind lb vserver|unbind cs vserver)
使用实例通过命令行删除缓存策略
在命令提示符下,输入:
rm cache policy
使用实例GUI方式解绑定缓存策略。
导航到优化>集成缓存,点击缓存策略管理器,并通过指定相关的绑定点和连接类型(请求/响应)来解除绑定策略。
使用实例删除策略标签调用。
- 导航到优化>集成缓存,点击缓存策略管理器,并指定相关的绑定点(负载均衡虚拟服务器或内容切换虚拟服务器)和连接类型,即可查看绑定到该虚拟服务器的缓存策略列表。
- 在策略调用列中,清除该条目。