Citrix ADC

集成缓存

内容组

  • DEFAULT 内容组与其他内容组有何不同?

    DEFAULT 内容组的行为与任何其他组完全相同。使 DEFAULT 内容组特殊的唯一属性是,如果正在缓存对象且未创建任何内容组,则该对象将缓存在 DEFAULT 组中。

  • 内容组级别的“缓存控制”选项是什么?

    您可以向浏览器发送任何缓存控制头。有一个内容组级别选项 -cacheControl,它允许您指定要插入到浏览器响应中的缓存控制标头。

  • 内容组级别中的“Minhit”选项是什么?

    Minhit 是一个整数值,指定缓存对象之前缓存策略的最小单击次数。此值可在内容组级别进行配置。以下是从 CLI 配置此值的语法。

    add/set cache contentGroup \<Content_Group_Name> [-minHits \<Integer>]

  • expireAtLastByte 选项的用途是什么?

    使用 expireAtLastByte 选项,集成缓存可以在对象下载后立即过期。只有当时是未完成请求的请求才会从缓存中提供。任何新请求都会发送到服务器。当对象经常被修改时,如股票报价时,此设置非常有用。此过期机制与闪存缓存功能一起工作。要配置 expireAtLastByte 选项,请从 CLI 运行以下命令:

    add cache contentGroup \<Group_Name> –expireAtLastByte YES

缓存策略

  • 什么是缓存策略?

    策略确定哪些事务可缓存,哪些不可缓存。此外,策略添加或覆盖标准 HTTP 缓存行为。策略根据请求或响应的特定特性来确定操作(如 CACHE 或 NOCACHE)。如果响应匹配策略规则,则响应中的对象将添加到策略中配置的内容组中。如果尚未配置内容组,则该对象将添加到 DEFAULT 内容组中。

  • 什么是策略命中?

    当请求或响应与缓存策略匹配时,会发生单击。

  • 什么是未命中?

    当请求或响应与任何缓存策略不匹配时,会发生错误。如果请求或响应匹配缓存策略,但对 RFC 行为的某些覆盖阻止对象存储在缓存中,也可能发生错误。

  • 我已经配置了 Citrix ADC 设备的集成缓存功能。添加以下策略时,将显示一条错误消息。命令中是否有任何错误?

    add cache policy image_caching -rule exp1 | ns_ext_not_jpeg –action cache

    \> ERROR: No such command

    在前面的命令中,表达式应位于引号内。如果没有引号,则操作员被视为管道操作员。

内存要求

  • 我可以在 Citrix ADC 设备上运行哪些命令来检查分配给缓存的内存?

    要显示 Citrix ADC 设备中为缓存分配的内存,请从 CLI 运行以下命令之一:

    • show cache parameter

      在输出中,检查内存使用限制参数的值。这是分配给缓存的最大内存。

    • show cache \<Content_Group_Name>

      在输出中,检查“内存使用量”和“内存使用量限制”参数的值,这些参数指示了为单个内容组使用和分配的内存。

  • 我的 Citrix ADC 设备有 2 GB 的内存。缓存是否有任何建议的内存限制?

    对于 Citrix ADC 设备的任何型号,您可以将一半内存分配给缓存。但是,Citrix 建议分配不到一半的内存,因为内存依赖关系。您可以运行以下命令来分配 1 GB 内存进行缓存:

    set cache parameter -memLimit 1024

  • 是否有可能为单个内容组分配内存?

    是。即使您通过运行 set cache parameter –memlimit<Integer> 来全局为集成缓存分配内存,也可以通过运行 set cache <Content_Group_Name> –memLimit <Integer> 命令将内存分配给各个内容组。您可以分配给内容组(组合)的最大内存不能超过已分配给集成缓存的内存。

  • 集成缓存和 TCP 缓冲区之间的内存依赖关系是什么?

    如果 Citrix ADC 设备有 2 GB 内存,则该设备保留大约 800 到 900 MB 的内存,剩余内存将分配给 FreeBsd 操作系统。因此,您可以将最多 512 MB 的内存分配给集成缓存,其余的内存分配给 TCP 缓冲区。

  • 如果我不将全局内存分配给集成缓存,它是否会影响缓存过程?

    如果未将内存分配给集成缓存,则所有请求都会发送到服务器。若要确保已将内存分配给集成缓存,请运行 show cache 参数命令。实际上,如果全局内存为 0,则不会缓存对象,所以需要先设置。

验证命令

  • 显示缓存统计信息的选项有哪些?

    您可以使用以下选项之一显示缓存的统计信息:

    • stat cache

      显示缓存统计信息的摘要。

    • stat cache –detail

      显示缓存统计信息的完整详细信息。

  • 显示缓存内容的选项是什么?

    要显示缓存的内容,可以运行 show cache object 命令。

  • 我可以运行什么命令来显示存储在缓存中的对象的特征?

    如果存储在缓存中的对象为 GET //10.102.12.16:80/index.html,则可以通过从设备的 CLI 运行以下命令来显示有关该对象的详细信息:

    show cache object -url '/index.html' -host 10.102.3.96 -port 80

  • 是否必须指定组名称作为参数来显示缓存中的参数化对象?

    是。必须将组名称指定为参数,以便在缓存中显示参数化对象。例如,请考虑您已使用相同的规则添加了以下策略:

     add cache policy p2 -rule ns_url_path_cgibin -action CACHE –storeInGroup g1
     add cache policy p1 -rule ns_url_path_cgibin -action CACHE -storeInGroup g2
    

    在这种情况下,对于多个请求,如果计算策略 p1,则其命中计数器将递增,策略将对象存储在具有命中参数的 g1 组中。因此,您必须运行以下命令才能显示缓存中的对象:

    show cache object -url "/cgi-bin/setCookie.pl" -host 10.102.18.152 groupName g1

    同样,对于另一组多个请求,如果计算策略 p2,则其命中计数器将递增,策略将对象存储在没有命中参数的 g2 组中。因此,您必须运行以下命令才能显示缓存中的对象:

    show cache object -url "/cgi-bin/setCookie2.pl" -host 10.102.18.152

  • 我注意到 nscachemgr 命令的输出中有一些空白条目。这些条目是什么?

    考虑以下 nscachemgr 命令的示例输出。此输出中的空白条目以粗体突出显示,供您参考:

     root@ns# /netscaler/nscachemgr -a
     //10.102.3.89:80/image8.gif
     //10.102.3.97:80/staticdynamic.html
     //10.102.3.97:80/
     //10.102.3.89:80/image1.gif
     //10.102.3.89:80/file5.html
     //10.102.3.96:80/
     //10.102.3.97:80/bg_logo_segue.gif
     //10.102.3.89:80/file500.html
     //10.102.3.92:80/
     //10.102.3.96:80/cgi-bin/rfc/ccProxyReval.pl
     Total URLs in IC = 10
    

    输出中的空白条目是由于 GET/HTTP/1.1 的默认缓存属性所致。

刷新对象

  • 如何从缓存中刷新选择性对象?

    您可以通过对象的完整 URL 唯一标识对象。要刷新此对象,您可以执行以下任一任务:

    • 刷新缓存
    • 刷新内容组
    • 刷新特定对象 要刷新特定对象,您必须指定查询参数。您可以指定用于刷新对象的 invalParam 参数。此参数仅适用于查询。
  • 缓存配置中的任何更改是否会触发缓存的刷新?

    是。当您对缓存配置进行任何更改时,所有 SET 缓存命令都会刷新相应的内容组。

  • 我更新了服务器上的对象。我是否需要刷新缓存的对象?

    是。更新服务器上的对象时,必须刷新缓存的对象,或至少刷新相关对象和内容组。集成缓存不受服务器更新的影响。它继续为缓存的对象提供服务,直到它们过期。

闪存缓存

  • 什么是 Citrix ADC 设备的闪存缓存功能?

    当大量客户端访问相同的内容时,会出现 Flash 人群的现象。结果是流向服务器的流量突然激增。通过闪存缓存功能,Citrix ADC 设备只向服务器发送一个请求,可以提高在这种情况下的性能。所有其他请求都在设备上排队,并向所有请求提供单个响应。您可以使用以下命令之一启用快速缓存功能:

    • add cache contentGroup \<Group_Name> -flashCache YES
    • set cache contentGroup \<Group_Name> -flashCache YES
  • 闪存缓存客户端的限制是多少?

    闪存缓存客户端的数量取决于 Citrix ADC 设备上资源的可用性。

默认行为

  • Citrix ADC 设备是否在过期时主动接收对象?

    Citrix ADC 设备永远不会在到期时主动接收对象。这是真实的,即使对于负面的对象。到期后的第一次访问触发对服务器的请求。

  • 集成缓存是否在开始接收响应之前将客户端添加到队列中以供服务?

    是。集成缓存将客户端添加到队列中,以便在它开始接收响应之前提供服务。

  • 使用缓存配置的参数验证缓存对象的默认值是什么?

    HOSTNAME_AND_IP 是默认值。

  • Citrix ADC 设备是否在日志文件中创建日志条目?

    是。Citrix ADC 设备在日志文件中创建日志条目。

  • 压缩对象是否存储在缓存中?

    是。压缩的对象存储在缓存中。

与其他功能的互操作性

  • 当前存储在缓存中并通过 SSL VPN 访问的对象会发生什么情况?

    通过 SSL VPN 访问时,存储在缓存中并定期访问的对象将作为缓存单击。

  • 当通过 SSL VPN 访问并随后通过常规连接访问时,存储在缓存中的对象会发生什么情况?

    通过常规连接访问时,通过 SSL VPN 访问存储的对象将作为单击。

  • 使用 Web 日志记录功能时,如何区分表示从缓存提供响应的条目和服务器提供的条目?

    对于从集成缓存提供的响应,服务器日志字段包含值 IC。对于从服务器发送的响应,服务器日志字段包含服务器发送的值。以下是集成缓存事务的示例日志条目:

    "10.102.1.52 - "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0; .NET CLR 1.0.3705)" "GET /" 200 0 "IC" 10.102.1.45"

    与客户端请求一起,记录的响应是发送给客户端的响应,而不一定是服务器发送的响应。

其他

  • 您的配置释放和异常是什么意思?

    通过配置 relexpiry 和 absexpiry,这意味着无论标题中出现什么,您都覆盖标题。您可以配置不同的过期设置和内容组级别。对于 relexpiry,标头的过期取决于 Citrix ADC 接收对象的时间。对于异常情况,过期取决于 Citrix ADC 上配置的时间。Relexpiry 是在几秒钟内进行配置的。Absexpiry 是一天中的时间。

  • 您的配置 weakpos 和启发式是什么意思?

    弱点和启发式就像回退值一样。如果存在过期标头,则只有在最后修改的标头存在时才会考虑该标头。Citrix ADC 设备根据上次修改的标头和启发式参数设置过期。启发式过期计算通过检查上次修改的标头来确定到期的时间。自上次修改对象以来的持续时间的一定百分比被用作到期的时间。对象的启发式,该对象在较长时间内保持未修改,并且可能具有较长的到期期。–heurExpiryParam 指定在此计算中使用的百分比值。否则,设备将使用弱值。

  • 配置动态缓存之前应该考虑什么?

    如果有某个参数以名称-值形式并且没有完整的 URL 查询,或者设备接收到 cookie 标头或 POST 正文中的参数,请考虑配置动态缓存。要配置动态缓存,您必须配置 hitParams 参数。

  • 参数名称中如何支持十六进制编码?

    在 Citrix ADC 设备上,参数名称中支持 %Hexhex 编码。在为 hitParams 或 invalParams 参数指定的名称中,您可以指定名称中包含 %HEXHEX 编码的名称。例如,名称 nam%65 和 n%61m%65 是等效的。

  • 选择 hitParam 参数的过程是什么?

    考虑 POST 请求的 HTTP 标头的以下摘录:

     POST /data2html.asp?param1=value1&param2=&param3&param4=value4
     HTTP/1.1
     Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
     application/vnd.ms-powerpoint, application/vnd.ms-excel,
     application/msword, application/x-shockwave-flash, \*/\*
     Referer: http://10.102.3.97/forms.html
     Accept-Language: en-us
     Content-Type: application/x-www-form-urlencoded
     Accept-Encoding: gzip, deflate
     User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
     Host: 10.102.3.97
     Content-Length: 153
     Connection: Keep-Alive
     Cache-Control: no-cache
     Cookie: ASPSESSIONIDQGQGGRNY=NNLLKDADEENOAFLCCDGFGDMO
     S1=This+text+is+only+text%2C+not+more+and+not+less%2C+%0D%0Ajust+text+to+be+itself%2C+namely+%22Text%22+to+be+posted+as+text+%28what+else...%29&B1=Submit
    

    在上述请求中,您可以根据您的要求使用 S1 和 B1,以粗体突出显示为您的参考,作为 hitParams。此外,如果您在 ASPSESSIONIDQGQGGRNY 内容组中使用 -matchCookies YES,那么您也可以使用这些参数作为 hitParams。

  • 如果响应不可缓存,排队的客户端会发生什么情况?

    如果响应不可缓存,则队列中的所有客户端收到的响应与第一个客户端收到的响应相同。

  • 否可以在同一内容组上启用每次轮询 (PET) 和闪存缓存功能?

    否。不能在同一内容组上启用 PET 和闪存缓存。集成的缓存不会对闪存缓存内容组执行 AutoPET 功能。PET 功能确保集成缓存不会在没有咨询服务器的情况下为存储的对象提供服务。您可以为内容组显式配置 PET。

  • 何时为排队的客户端创建日志条目?

    日志条目将在设备收到响应标头后不久为排队的客户端创建。只有当响应标头不会使对象不可缓存时,才会创建日志条目。

  • 使用缓存配置的参数验证缓存对象的 DNS、HOSTNAME 和 HOSTNAME_AND_IP 值的含义是什么?

    其含义如下:

    • set cache parameter -verifyUsing HOSTNAME

      这将忽略目标 IP 地址。

    • set cache parameter -verifyUsing HOSTNAME_AND_IP

      这与目标 IP 地址匹配。

    • set cache parameter -verifyUsing DNS

      这使用 DNS 服务器。

  • 我已经把 weakNegRelExpiry 设置为 600,也就是 10 分钟。我注意到 404 响应没有被缓存。原因是什么?

    这完全取决于您的配置。默认情况下,404 响应缓存 10 分钟。如果您希望从服务器中获取所有 404 响应,请将 –weakNegRelExpiry 指定为 0。您可以将 –weakNegRelExpiry 微调为所需值,例如更高或更低,以获取适当缓存的 404 响应。如果您已经为正面响应配置了 –absExpiry,则可能无法产生所需的结果。

  • 当用户使用 Mozilla Firefox 浏览器访问网站时,会提供更新的内容。但是,当用户通过使用 Microsoft Internet 资源管理器浏览器访问该站点时,将提供过时的内容。可能是什么原因?

    Microsoft Internet 资源管理器浏览器可能从其本地缓存而不是 Citrix ADC 集成缓存中获取内容。原因可能是 Microsoft Internet 浏览器浏览器不尊重响应中的到期相关标题。

    若要解决此问题,您可以禁用 Internet Explorer 的本地缓存并清除脱机内容。清除离线内容后,浏览器应显示更新的内容

  • 如果单击量为零,该怎么办?

    检查服务器时间和 NS 时间是否同步。并且 weakPosrelexpiry 限制集应该承担 NS 和服务器之间的时差,如下所示

     root@ns180# date
     Tue May 15 18:53:52 IST 2012
    
  • 为什么策略会得到单击,但没有被缓存?

    验证内存已分配给集成缓存,并且分配大于零。

  • 是否有可能将缓存计数器零?

    没有用于将缓存计数器设置为零的命令行或 GUI 选项,并且刷新缓存也不会这样做。重新启动框会自动将这些计数器设置为零。

集成缓存