Citrix ADC

集成缓存

集成缓存在Citrix ADC设备上提供内存存储,并向用户提供Web内容,而无需往返于原始服务器。对于静态内容,集成缓存只需要很少的初始设置。在启用集成缓存特性并执行基本设置(例如,确定允许缓存使用的Citrix ADC设备内存量)之后,集成缓存将使用内置策略来存储和提供特定类型的静态内容,包括简单的网页和图像文件。您还可以配置集成缓存来存储和提供被Web和应用程序服务器标记为不可缓存的动态内容(例如,数据库记录和股票报价)。

注意:

集成缓存这个术语可以与AppCache互换使用;请注意,从功能的角度来看,这两个术语的含义是相同的。

当请求或响应匹配内置策略或您创建的策略中指定的规则(逻辑表达式)时。Citrix ADC设备执行与策略相关的操作。默认情况下,所有策略都将缓存对象存储在默认内容组中,并从默认内容组中检索它们。您可以为不同类型的内容创建自己的内容组。

要使设备能够在内容组中查找缓存的对象,可以配置选择器。选择器根据表达式匹配缓存的对象,或者您可以指定参数来查找内容组中的对象。如果您按照Citrix的建议使用选择器,请先配置它们,以便在配置内容组时可以指定选择器。接下来,设置要添加的任何内容组,以便在配置策略时可以使用它们。要完成初始配置,请通过将每个策略绑定到全局绑定点或虚拟服务器来创建策略库。或者,您可以绑定一个可以从其他政策性银行调用的标签。

集成缓存可以在计划过期之前使用预加载缓存对象方法来改进。为了管理缓存数据的处理,您可以配置插入到响应中的与缓存相关的标头。集成缓存还可以充当其他缓存服务器的转发代理。

注意:

集成缓存需要熟悉HTTP请求和响应。有关HTTP数据结构的信息,请参见实时HTTP标头“< http://livehttpheaders.mozdev.org/ >。”

集成缓存如何工作

集成的缓存监视流经Citrix ADC设备的HTTP和SQL请求,并将请求与存储的策略进行比较。根据结果,集成的缓存特性要么在缓存中搜索响应,要么将请求转发到源服务器。对于HTTP请求,集成缓存作为缓存中的部分内容来响应单个字节范围和多部分字节范围的请求。

如果客户端接受压缩的内容,缓存的数据将被压缩。您可以为内容组配置过期时间,也可以选择性地使内容组中的条目过期。

从集成缓存中提供的数据是请求,而从原始缓存中提供的数据是缓存丢失,如下表所示。

交易类型 规范
缓存命中 Citrix ADC设备从缓存中提供的响应,包括:静态对象(例如图像文件和静态网页)、200个OK页面、203个非授权响应页面、300个Multiple Choices页面、301个永久移动页面、302个已找到页面、304个未修改页面。这些响应被称为积极响应。Citrix ADC设备还缓存以下负面响应:307个临时重定向页面,403个禁止页面,404个未找到页面,410个已删除页面。为了进一步提高性能,您可以配置Citrix ADC设备来缓存更多类型的内容。
可存储缓存缺失 对于可存储的缓存缺失,Citrix ADC设备从源服务器获取响应,并在将响应提供给客户端之前将其存储在缓存中。
非可存储缓存缺失 不可存储的缓存缺失不适合缓存。默认情况下,任何包含以下状态码的响应都是不可存储的缓存缺失:201、202、204、205、206状态码,除403、404和410、5xx状态码外的所有4xx状态码

注意:要将动态缓存集成到应用程序基础结构中,可以使用NITRO API远程发出缓存命令。例如,您可以配置在更新数据库表时使缓存响应过期的触发器。

为了确保缓存的响应与源服务器上的数据同步,需要配置过期方法。当Citrix ADC设备接收到与过期响应匹配的请求时,它会刷新来自源服务器的响应。

注意:Citrix建议同步Citrix ADC设备和一个或多个后端服务器上的时间。

动态缓存的工作原理

动态缓存基于参数值对、字符串、字符串模式或其他数据评估HTTP请求和响应。例如,假设用户在Bug报告应用程序中搜索Bug 31231。浏览器代表用户发送以下请求:

GET / mybugreportingsystem / mybugreport.dll吗?IssuePage&RecordId=31231&Template=view&TableId=1000 Host: mycompany.net User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) Gecko/2008052906 Firefox/3.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 

在这个例子中,这个bug报告应用程序的GET请求总是包含以下参数:

  • IssuePage
  • RecordID
  • 模板
  • TableId

GET请求不会更新或更改数据,因此您可以在缓存策略和选择器中配置这些参数,如下所示:

  • 您配置了一个缓存策略,该策略查找HTTP请求中的字符串mybugreportingsystem和GET方法。此策略将匹配请求定向到内容组以查找错误。
  • 在针对bug的内容组中,配置一个打击选择器,它匹配各种参数值对,包括IssuePage、RecordID等。

请注意

浏览器可以基于一个用户操作发送多个GET请求。以下是用户根据错误ID搜索错误时浏览器发出的一系列三个独立的GET请求。

GET / mybugreportingsystem / mybugreport.dll吗?IssuePage&RecordId=31231&Template=view&TableId=1000 GET /mybugreportingsystem/mybugreport.dll?IssuePage&Template=viewbtns&RecordId=31231&TableId=1000 GET /mybugreportingsystem/mybugreport.dll?IssuePage&Template=viewbody&RecordId=31231&tableid=1000 

为了完成这些请求,多个响应被发送到用户的浏览器,用户看到的网页是响应的集合。

如果用户更新了错误报告,则必须使用来自原始服务器的数据刷新缓存中的相应响应。当用户更新错误报告时,错误报告应用程序发出HTTP POST请求。在本例中,您需要配置以下内容以确保POST请求在缓存中触发无效:

  • 一个请求时无效策略,它查找字符串mybugreportingsystem和POST HTTP请求方法,并将匹配的请求定向到错误报告的内容组。
  • 针对基于RecordID参数的缓存内容过期的bug报告的内容组的无效选择器。此参数出现在所有响应中,因此无效选择器可以使缓存中的所有相关项过期。

下面的摘录显示了一个更新样例bug报告的POST请求。

POST / mybugreportingsystem / mybugreport.dll吗?transtionform HTTP/1.1\r\n User-Agent: Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.0) Opera 7.23 [en]\r\n Host: mybugreportingsystem\r\n Cookie:ttSearch.134=%23options%3Afalse%23active%23owner%3Afalse% 23un主%3Afalse% 23subter %3Afalse%23incsub% 3attrue;Cookie2: $Version=1\r\n…\r\n ProjectId=2&RecordId=31231&TableId=1000&TransitionId=1&Action=Update&CopyProjectId=0&ReloadForm=0&State=&RecordLockId=49873+issues+in+HTTP&F43…< !——NeedCopy >

当Citrix ADC设备接收到此请求时,它执行以下操作:

  • 用无效策略匹配请求。
  • 查找策略中指定的内容组。
  • 对该内容组应用无效选择器,并使所有匹配RecordID=31231的响应失效。

当用户为该错误报告发出新请求时,Citrix ADC设备将转到原始服务器,获取与报告实例关联的所有响应的更新副本。它将响应存储在内容组中,并将它们提供给用户的浏览器,后者重新组装报告并显示它。

配置集成缓存

要使用集成缓存,必须安装license并启用该特性。启用集成缓存后,Citrix ADC®设备会自动缓存内置策略指定的静态对象,并生成缓存行为的统计信息。(内置策略在策略名称的初始位置有下划线。)

即使内置策略适合您的情况,您也可能需要修改全局属性。例如,您可能希望修改分配给集成缓存的Citrix ADC设备内存量。

如果您希望在更改设置之前观察缓存操作,请参阅“显示缓存对象和缓存统计信息”。

注意:

Citrix ADC缓存是一个内存存储,当您重新启动设备时,它将被清除。

安装集成缓存license

  • 需要购买集成缓存license。
  • 从Citrix获取license代码,进入命令行界面登录。

在命令行界面,将license文件复制到/ nsconfig /许可证文件夹中。

  • 使用以下命令重新启动Citrix ADC设备:

重新启动

要启用集成缓存,请执行以下操作:当您启用集成缓存时,Citrix ADC设备开始缓存服务器响应。如果没有配置任何策略或内容组,则内置策略将缓存对象存储在Default内容组中。

在命令提示符下,键入以下命令之一来启用或禁用集成缓存:

启用ns特性IC

配置缓存的全局属性

全局属性应用于所有缓存数据。可以指定分配给集成缓存的Citrix ADC内存的数量,通过头插入。用于验证必须提供缓存对象的标准。缓存中允许的POST主体的最大长度,是否绕过HTTP GET请求的策略评估,以及在无法评估策略时采取的操作。

缓存内存容量仅受硬件设备内存的限制。此外,nCore Citrix ADC设备中的任何包引擎(所有传入TCP请求的中央分发中心)都知道nCore Citrix ADC设备中其他包引擎缓存的对象。

注意:

当默认的全局内存限制设置为0并且启用集成缓存(IC)特性时,设备不会缓存任何对象。对于缓存,必须显式配置全局内存限制。但是,如果启用“设置身份验证、授权和审计参数enableStaticPageCaching”选项,则会在设备中配置一些默认内存。此内存不足以缓存大型对象,因此有必要为IC分配更高的内存限制,可以通过配置“set cache parameter -memLimit”命令来实现。只有在保存配置并重新启动设备之后,才会应用新的设置。

可以修改缓存对象的全局内存限制。但是,当您将全局内存限制更新为低于现有值的值时(例如,从10 GB更改为4 GB),设备将继续使用内存限制。

这意味着即使将集成缓存限制配置为某个值,实际使用的限制也可能更高。然而,当对象从缓存中删除时,这些多余的内存将被释放。

show cache parameter命令显示的是配置值(memory Usage limit)和实际使用值(memory Usage limit (active值))。

在命令提示符下,输入:

设置缓存参数[-memLimit ] [-via ] [-verifyUsing ] [-maxPostLen ] [-prefetchMaxPending ] [-enableBypass(YES|NO)] [- undeffaction (NOCACHE|RESET)] 

通过Citrix ADC GUI启用集成缓存

导航到系统>设置,点击配置基本特性,并选择集成缓存

使用Citrix ADC GUI配置缓存的全局设置

导航到优化>集成缓存,点击更改缓存设置,并配置缓存的全局设置。

为集成缓存设置内置内容组、模式集和策略

Citrix ADC设备包括一个内置的集成缓存配置,您可以使用它来缓存内容。该配置由一个名为ctx_cg_poc的内容组、一个名为ctx_file_extensions的模式集和一组集成缓存策略组成。在内容组ctx_cg_poc中,只缓存500 KB或更小的对象。内容缓存时间为86000秒,内容组的内存限制为512mb。模式集是用于文件类型匹配的常用扩展的索引数组。

下表列出了内置的集成缓存策略。缺省情况下,不将策略绑定到任何绑定点。如果希望Citrix ADC设备根据策略评估流量,则必须将策略绑定到绑定点。策略缓存ctx_cg_poc内容组中的对象。

集成缓存策略名称 策略规则
_cacheVPNStaticObjects HTTP.REQ.URL.SET_TEXT_MODE (IGNORECASE) .CONTAINS_INDEX (ctx_file_extensions) .BETWEEN (101150)
_cacheTCPVPNStaticObjects HTTP.REQ.URL.ENDSWITH (. css)
_cacheOCVPNStaticObjects HTTP.REQ.URL.ENDSWITH (pdf格式)
_cacheWFStaticObjects HTTP.REQ.URL.ENDSWITH (js)
_mayNoCacheReq HTTP.RES.HEADER(“内容类型”).CONTAINS(“应用程序/ x-javascript”)
_noCacheRest 真正的

刷新缓存配置

可以刷新缓存组、缓存组或缓存对象定位符。以下是刷新缓存对象的命令。

在命令提示符下,输入:

清空缓存内容组all

例子

0x00000089bae000000004 DEFAULT GET //1.1.1.1:80/html/index.html?name=hello 0x00000089bae000000005 DEFAULT GET //1.1.1.1:80/html/index.html?刷新缓存内容组全部完成'刷新缓存内容组<内容组名称> ' 

例子:

0x00000089bae000000004 DEFAULT GET //1.1.1.1:80/html/index.html?name=hello 0x00000089bae000000005 DEFAULT GET //1.1.1.1:80/html/index.html?name=hi刷新缓存ob -| 0x00000089bae000000004 done '刷新缓存对象(-locator  | (- URL  (-host  [-port ] [- groupname ] [- httpmethod (GET | POST)])) ' 

例子:

0x00000089bae000000006 DEFAULT GET //1.1.1.1:80/html/index.html flush cache ob -URL /html/index.html -host 1.1.1.1 -groupName DEFAULT done 

使用Citrix ADC GUI刷新缓存配置

完成使用Citrix ADC GUI配置缓存刷新的步骤

  1. 导航到优化>内容组织
  2. 内容组织详细窗格,单击添加
  3. 创建缓存内容组页,在下面设置如下参数其他人标签:
    1. 刷新缓存。选中该复选框以刷新缓存对象。
  4. 点击创建关闭

    刷新缓存对象

为各种场景配置集成缓存

以下部分描述了NetScaler设备上针对各种场景的集成缓存配置。

从NetScaler 9.2版本开始,集成的缓存有更多的内存用于缓存。集成的缓存内存仅受硬件设备上可用内存的限制。您可以将最多50%的可用内存分配给集成缓存功能。

通过命令行设置cache的内存分配

在命令提示符下,输入:

设置cache参数-memlimit

注意:

集成缓存的默认全局内存限制为零。因此,即使启用了集成缓存功能,NetScaler设备也不会缓存任何对象,直到显式设置了全局内存限制。

以下部分将指导您在不同场景下配置集成缓存。

注意:

NetScaler设备的内存限制在设备启动时确定。因此,对内存限制的任何更改都需要重新启动设备,以使更改适用于各个包引擎。

启用集成缓存,并将缓存内存限制设置为非零

考虑这样一个场景,在该场景中启动设备,启用了集成缓存特性,并且将全局内存限制设置为正数。您之前设置的内存将在引导过程中分配给集成缓存特性。您可能希望根据设备上的可用内存将内存限制更改为另一个值。

命令行配置

  1. 显示缓存参数
> show cache parameter集成缓存全局配置:内存使用限制:500mbytes内存使用限制(活跃值):500mbytes内存使用限制最大值:843mbytes Via header: NS-CACHE-9.3: 18使用:HOSTNAME_AND_IP校验缓存对象POST主体大小累积:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 
  1. 设置非零内存限制

设置cache参数-memlimit 600

注意:

上述命令显示如下警告信息:警告:要使用新的集成缓存内存限制,请保存配置并重新启动NetScaler设备。

  1. 保存配置

保存配置

  1. 在shell提示符下,运行以下命令在配置文件中进行验证。

root@ns# cat /nsconfig/ns.conf | grep memLimit .conf

  1. 更改内存限制

设置缓存参数-memLimit 600 -via NS-CACHE-9.3: 18 -verifyUsing HOSTNAME_AND_IP -maxPostLen 0 -enableBypass YES - undeffaction NOCACHE

  1. 重新启动设备

root@ns #重启

  1. 验证内存限制的新值
> show cache parameter集成缓存全局配置:内存使用限制:600mbytes内存使用限制(激活值):600mbytes内存使用限制最大值:843mbytes Via header: NS-CACHE-9.3: 18使用:HOSTNAME_AND_IP校验缓存对象POST主体大小累积:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 

在所有包引擎成功启动之后,集成的缓存特性将协商您配置的内存。如果设备不能使用配置的内存,则相应地分配内存。如果可用内存小于您分配的内存,则设备建议使用较小的内存。集成缓存特性使用与活动值相同的值。

禁用集成缓存,并将缓存内存限制设置为非零

在这个场景中,当您启动设备时,集成的缓存特性被禁用,并且全局内存限制被设置为一个正数。因此,在引导过程中不会为集成缓存分配内存。

命令行配置

  1. 显示缓存参数
> show cache parameter集成缓存全局配置:内存使用限制:600mbytes内存使用限制最大值:843mbytes Via header: NS-CACHE-9.3: 18校验缓存对象使用:HOSTNAME_AND_IP最大POST正文累计大小:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 
  1. 设置新的内存限制

设置cache参数-memlimit 500

注意:

上述命令显示如下警告信息:警告:功能未启用[IC]

  1. 保存配置

保存配置

  1. 在shell提示符下,运行以下命令在配置文件中进行验证

root@ns# cat /nsconfig/ns.conf | grep memLimit .conf

  1. 更改内存限制

设置缓存参数-memLimit 500 -via NS-CACHE-9.3: 18 -verifyUsing HOSTNAME_AND_IP -maxPostLen 0 -enableBypass YES - undeffaction NOCACHE

  1. 验证内存限制的新值
> show cache parameter集成缓存全局配置:内存使用限制:500mbytes内存使用限制最大值:843mbytes Via header: NS-CACHE-9.3: 18校验缓存对象使用:HOSTNAME_AND_IP最大POST正文累计大小:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 
  1. 启用集成缓存特性

启用ns特性IC

  1. 验证内存限制的新值
> show cache parameter集成缓存全局配置:内存使用限制:500mbytes内存使用限制(活跃值):500mbytes内存使用限制最大值:843mbytes Via header: NS-CACHE-9.3: 18使用:HOSTNAME_AND_IP校验缓存对象POST主体大小累积:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 

注意:

500mb内存分配给集成缓存特性。

  1. 保存配置以确保在设备重新启动时自动将内存分配给该特性。

集成缓存已启用,缓存内存设置为零

在此场景中,当您启动设备时,将启用集成缓存特性,并将全局内存限制设置为零。因此,在引导过程中不会为集成缓存分配内存。

命令行配置

  1. 从shell提示符验证ns.conf文件中设置的内存限制

root@ns# cat ns.conf | grep memLimit

  1. 更改内存限制

设置缓存参数-memLimit 0 -via NS-CACHE-9.3: 18 -verifyUsing HOSTNAME_AND_IP -maxPostLen 4096 -enableBypass YES - undeffaction NOCACHE

  1. 验证内存限制的值
> show cache parameter集成缓存全局配置:内存使用限制:0 Mbytes内存使用限制最大值:843 Mbytes Via header: NS-CACHE-9.3: 18校验缓存对象使用:HOSTNAME_AND_IP最大POST正文累计大小:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 

注意:

内存限制设置为0 MB,不分配内存给集成缓存特性。

  1. 设置内存限制以确保集成缓存特性缓存对象

设置cache参数-memLimit 600

运行上述命令后,设备将为集成缓存特性协商内存,并将可用内存分配给该特性。它会导致设备缓存对象,而无需重新启动设备。

  1. 验证内存限制的值
> show cache parameter集成缓存全局配置:内存使用限制:600mbytes内存使用限制(激活值):600mbytes内存使用限制最大值:843mbytes Via header: NS-CACHE-9.3:使用HOSTNAME_AND_IP方式验证缓存对象POST主体最大累积大小:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 

注意:

600 MB内存分配给集成缓存特性。

  1. 保存配置。确保在设备重新启动时自动将内存分配给该特性。

  2. 从shell提示符验证ns.conf文件中设置的内存限制

root@ns# cat /nsconfig/ns.conf | grep memLimit .conf

  1. 更改内存限制

设置缓存参数-memLimit 600 -via NS-CACHE-9.3: -verifyUsing HOSTNAME_AND_IP -maxPostLen 4096 -enableBypass YES - undeffaction NOCACHE

集成缓存被禁用,缓存内存设置为零

在这个场景中,当您启动设备时,集成的缓存特性被禁用,并且全局内存限制被设置为零。因此,在引导过程中不会为集成缓存分配内存。

命令行配置

  1. 从shell提示符验证ns.conf文件中设置的内存限制

root@ns# cat /nsconfig/ns.conf | grep memLimit .conf

  1. 更改内存限制

设置缓存参数-memLimit 0 -via NS-CACHE-9.3: 18 -verifyUsing HOSTNAME_AND_IP -maxPostLen 4096 -enableBypass YES - undeffaction NOCACHE

  1. 验证内存限制的值
> show cache parameter集成缓存全局配置:内存使用限制:0 Mbytes内存使用限制最大值:843 Mbytes Via header: NS-CACHE-9.3: 18校验缓存对象使用:HOSTNAME_AND_IP最大POST正文累计大小:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 

注意:

内存限制设置为0 MB,不分配内存给集成缓存特性。同样,当执行任何缓存配置命令时,会显示以下警告信息:警告:功能未启用[IC]

  1. 启用集成缓存特性

启用ns特性IC

注意:

在此阶段,当您启用集成缓存特性时,设备不会为该特性分配内存。因此,没有对象被缓存到内存中。同样,当执行任何缓存配置命令时,会显示以下警告信息:IC没有配置内存,使用set cache parameter命令设置内存限制。

  1. 设置内存限制以确保集成缓存特性缓存对象

设置cache参数-memLimit 500

运行上述命令后,设备将为集成缓存特性协商内存,并将可用内存分配给该特性。它将导致设备缓存对象,而无需重新启动设备。

注意:

启用该特性和设置内存限制的顺序很重要。如果在启用该特性之前设置了内存限制,则会显示以下警告信息:警告:功能未启用[IC]

  1. 验证内存限制的值
> show cache parameter集成缓存全局配置:内存使用限制:500mbytes内存使用限制(活跃值):500mbytes内存使用限制最大值:843mbytes Via header: NS-CACHE-9.3:使用HOSTNAME_AND_IP方式验证缓存对象POST主体最大累积大小:0字节当前未完成的预取:0最大未完成的预取:4294967295将NOCACHE策略视为BYPASS策略:YES global Undef Action: NOCACHE 

注意:

500mb内存分配给集成缓存特性。

  1. 保存配置

保存配置

  1. 从shell提示符验证ns.conf文件中设置的内存限制

root@ns# cat /nsconfig/ns.conf | grep memLimit .conf

  1. 更改内存限制

设置缓存参数-memLimit 500 -via NS-CACHE-9.3: 18 -verifyUsing HOSTNAME_AND_IP -maxPostLen 4096 -enableBypass YES - undeffaction NOCACHE

集成缓存