ADC

集成缓存

内容组

  • DEFAULT 内容组与其他内容组有何差别?

    DEFAULT 内容组的行为与任何其他组的行为相同。使 DEFAULT 内容组与众不同的唯一属性是,如果正在缓存对象但尚未创建任何内容组。该对象缓存在 DEFAULT 组中。

  • 内容组级别的“cache-Control”选项是什么?

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

  • 内容组级别中的“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 行为的某些覆盖会阻止将对象存储在缓存中,也可能发生未命中。

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

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

    \> ERROR: No such command

    在前面的命令中,表达式必须放在引号内。如果不使用引号,操作符被视为管道操作符。

内存要求

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

    要显示 NetScaler 设备中为缓存分配的内存,请从 CLI 运行以下任意命令:

    • show cache parameter

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

    • show cache \<Content_Group_Name>

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

  • 我的 NetScaler 设备有 2 GB 的内存。缓存有任何建议的内存限制吗?

    对于任何型号的 NetScaler 设备,都可以将一半的内存分配给缓存。但是,由于内部内存依赖性,Citrix 建议分配的内存少于一半。可以运行以下命令为缓存分配 1 GB 的内存:

    set cache parameter -memLimit 1024

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

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

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

    如果 NetScaler 设备有 2 GB 的内存,则该设备会预留大约 800 MB 到 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
     <!--NeedCopy-->
    

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

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

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

    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
     <!--NeedCopy-->
    

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

刷新对象

  • 我怎样才能从缓存中刷新一个选择性对象?

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

    • 刷新缓存
    • 刷新内容组
    • 刷新特定对象

    要刷新特定对象,必须指定查询参数。可以指定 invalParam 参数来刷新对象。此参数仅适用于查询。

  • 缓存配置中的任何更改是否会触发缓存刷新?

    是。更改为缓存配置时,所有 SET cache 命令本质上都会刷新相应的内容组。

  • 我已经更新了服务器上的对象。我需要刷新缓存的对象吗?

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

闪存缓存

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

    当许多客户端访问相同的内容时,就会出现闪存拥挤的现象。结果是流向服务器的流量突然激增。闪存缓存功能使得 NetScaler 设备能够通过仅向服务器发送一个请求来提高这种情况下的性能。所有其他请求都在设备上排队,并且单个响应将提供给这些请求。可以使用以下任一命令来启用快速缓存功能:

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

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

默认行为

  • NetScaler 设备是否会在到期时主动接收对象?

    NetScaler 设备永远不会在到期时主动接收对象。即使对于负对象也是如此。过期后的第一次访问会触发对服务器的请求。

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

    是。集成的缓存甚至在开始接收响应之前就将客户端添加到服务队列中。

  • “Verify cached object using parameter of the cache configuration”(使用缓存配置的参数验证缓存的对象)的默认值是什么?

    默认值为 HOSTNAME_AND_IP。

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

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

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

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

与其他功能的互操作性

  • 当前存储在缓存中并通过 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"

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

注意

使用 Web 日志记录时,来自集成的缓存的响应在服务器日志字段中包含值 IC。服务器日志字段出现在带“%o1”格式说明符的 NSWL 客户端中。

其他

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

    通过配置 relexpiryabsexpiry,这意味着无论标题中显示的内容如何,都会覆盖标头。可以配置不同的过期设置和内容组级别。其中 relexpiry,标头的到期时间取决于 NetScaler 接收对象的时间。使用 absexpiry,过期时间取决于在 NetScaler 上配置的时间。 Relexpiry 以秒为单位进行配置。 Absexpiry 是一天中的时间。

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

    weakpos 和启发式就像回退价值。如果存在过期标头,则仅当上次修改的标头存在时才会考虑该标头。NetScaler 设备根据上次修改的标头和启发式参数设置到期时间。启发式到期计算通过检查上次修改的标头来确定到期时间。自上次修改对象以来的持续时间的一定百分比用作到期时间。在较长时间内保持不变的对象的启发式算法,并且可能具有更长的有效期。–heurExpiryParam 指定在此计算中使用的百分比值。否则,设备将使用 weakpos 值。

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

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

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

    在 NetScaler 设备上,参数名称支持 %HEXHEX 编码。在为 hitParams 或 invalParams 指定的名称中,可以指定名称中包含 %HEXHEX 编码的名称。例如,name、name%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
     <!--NeedCopy-->
    

    在前面的请求中,您可以使用以粗体突出显示的 S1 和 B1 作为 hitParams,具体取决于您的要求。此外,如果您在 ASPSESSIONIDQGQGGRNY 内容组中使用 -matchCookies YES,也可以将这些参数用作 hitParams。

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

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

  • 我是否能够在同一个内容组中启用每次都轮询 (PET) 和闪存缓存功能?

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

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

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

  • “Verify cached object using parameter of the cache configuration”(使用缓存配置的参数验证缓存的对象)的 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 Explorer 浏览器访问该站点时,会提供陈旧的内容。可能是什么原因?

    Microsoft Internet Explorer 浏览器可能正在从其本地缓存中获取内容,而不是 NetScaler 集成缓存中的内容。原因可能是 Microsoft Internet Explorer 浏览器没有考虑响应中与到期相关的标头。

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

  • 如果命中数为零怎么办?

    检查服务器时间与 NS 时间是否同步。同时,weakPosrelexpiry 限制集必须承受 NS 与服务器之间的时差,如下所示:

     root@ns180# date
     Tue May 15 18:53:52 IST 2012
     <!--NeedCopy-->
    
  • 为什么策略被命中但没有缓存任何内容?

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

  • 是否可以将缓存计数器归零?

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

集成缓存