ADC

集成缓存的默认设置

NetScaler 集成缓存功能为默认内容组提供具有默认设置和初始设置的内置策略。本节中的信息定义了内置策略和默认内容组的参数。

默认缓存策略

集成缓存具有内置策略。NetScaler 设备按特定顺序评估策略,如以下各节所述。

您可以使用绑定到请求时间替代或响应时间替代策略库的用户定义策略来覆盖这些内置策略。

注意: 如果您在 9.0 版之前配置了策略并在绑定策略时指定了-precedeDefRules 参数,则在迁移期间会自动将这些策略分配给超时绑定点。

查看默认策略

内置策略名称以下划线 (_) 开头。您可以使用 show cache policy 命令从命令行和管理控制台查看内置策略。

默认请求策略

您可以通过配置新策略并将其绑定到请求时间替代处理点来覆盖以下内置请求时间策略。在以下策略中,请注意,MAY_NOCACHE 操作规定,只有在响应时存在用户配置或内置 CACHE 指令时,才会缓存事务。

以下策略绑定到 _reqBuiltinDefaults 策略标签。它们按优先顺序列出。

不要为使用 GET 以外的任何方法的请求缓存响应。

策略名称是 _nonGetReq。以下是策略规则:

!HTTP.REQ.METHOD.eq(GET)

为标头值包含 If-Match 或 If-Unmodified-Since 的请求设置 NOCACHE 操作。

策略名称是 _advancedConditionalReq。以下是策略规则:

HTTP.REQ.HEADER("If-Match").EXISTS || HTTP.REQ.HEADER("If-Unmodified-Since").EXISTS

为具有以下标头值的请求设置 MAY_NOCACHE 操作:Cookie、授权、代理授权或包含 NTLM 或协商标头的请求。

策略名称为 _personalizedReq。以下是策略规则:

HTTP.REQ.HEADER("Cookie").EXISTS || HTTP.REQ.HEADER("Authorization").EXISTS || HTTP.REQ.HEADER("Proxy-Authorization").EXISTS || HTTP.REQ.IS_NTLM_OR_NEGOTIATE

默认响应策略

您可以通过配置新策略并将其绑定到响应时间替代处理点来覆盖以下默认响应时间策略。

以下策略绑定到 _resBuiltinDefaults 策略标签,并按其列出顺序进行评估:

  1. 除非响应的类型为 200、304、307、203,或者类型介于 400 到 499 之间或介于 300 和 302 之间,否则不要缓存 HTTP 响应。

    策略名称是 _uncacheableStatusRes。以下是策略规则:

    !((HTTP.RES.STATUS.EQ(200)) || (HTTP.RES.STATUS.EQ(304)) || (HTTP.RES.STATUS.BETWEEN(400,499)) || (HTTP.RES.STATUS.BETWEEN(300, 302)) || (HTTP.RES.STATUS.EQ(307))|| (HTTP.RES.STATUS.EQ(203)))

  2. 如果 HTTP 响应的标头为 Accept-Encoding 以外的任何值,则不要缓存 HTTP 响应。

    压缩模块插入 Vary: Accept_Encoding 标头。这个表达式的名字是 _uncacheableVaryRes。以下是策略规则:

    ((HTTP.RES.HEADER("Vary").EXISTS) && ((HTTP.RES.HEADER("Vary").INSTANCE(1).LENGTH > 0) || (!HTTP.RES.HEADER("Vary").STRIP_END\_WS.SET_TEXT_MODE(IGNORECASE).eq("Accept-Encoding"))))

  3. 如果响应的 Cache-Control 标头值为 No-Cache、No-Store 或 Private,或者如果缓存控制标头无效,则不要缓存响应。

    策略名称是 _uncacheableCacheControlRes。以下是策略规则:

    ((HTTP.RES.CACHE\_CONTROL.IS\_PRIVATE) || (HTTP.RES.CACHE\_CONTROL.IS\_NO\_CACHE) || (HTTP.RES.CACHE\_CONTROL.IS\_NO\_STORE) || (HTTP.RES.CACHE\_CONTROL.IS\_INVALID))

  4. 如果 Cache-Control 标头具有以下值之一,则缓存响应:公开、必须重新验证、Proxy-Revalidate、Max-Age、S-Maxage。

    策略名称是 _cacheableCacheControlRes。以下是策略规则:

    ((HTTP.RES.CACHE_CONTROL.IS_PUBLIC) || (HTTP.RES.CACHE_CONTROL.IS_MAX_AGE) || (HTTP.RES.CACHE_CONTROL.IS_MUST_REVALIDATE) || (HTTP.RES.CACHE_CONTROL.IS_PROXY_REVALIDATE) || (HTTP.RES.CACHE_CONTROL.IS_S_MAXAGE))

  5. 不要缓存包含 Pragma 标头的响应。

    该策略的名称是 _uncacheablePragmaRes。以下是策略规则:

    HTTP.RES.HEADER("Pragma").EXISTS

  6. 缓存包含 Expires 标头的响应。

    该策略的名称是 _cacheableExpiryRes。以下是策略规则:

    HTTP.RES.HEADER("Expires").EXISTS

  7. 如果响应包含值为 Image 的 Content-Type 标头,请删除标头中的所有 cookie 并将其缓存。

    该策略的名称是 _imageRes。以下是策略规则:

    HTTP.RES.HEADER("Content-Type").SET_TEXT_MODE(IGNORECASE).STARTSWITH("image/")

    您可以配置以下内容组以使用此策略:

    add cache contentgroup nocookie -group -removeCookies YES

  8. 不缓存包含 Set-Cookie 标头的响应。

    该策略的名称是 _ personalizedRes。以下是策略规则:

    HTTP.RES.HEADER(“Set-Cookie”).EXISTS   HTTP.RES.HEADER(“Set-Cookie2”).EXISTS

对默认策略的限制

您无法使用用户定义的策略替代以下内置请求时间策略。

这些策略按优先级顺序列出。

  1. 如果相应的 HTTP 请求缺少 GET 或 POST 方法,请勿缓存任何响应。
  2. 如果 HTTP 请求 URL 长度加上主机名超过 1744 字节,请勿缓存任何请求响应。
  3. 不要缓存包含 If-Match 标头的请求的响应。
  4. 不要缓存包含 If-Unmodified-Since 标头的请求。

注意这与 If-Modified-Since 标题不同。

  1. 如果服务器未设置过期标头,则不要缓存响应。

您无法改写以下内置响应时间策略。这些策略按其列出的顺序进行评估:

  1. 不要缓存 HTTP 响应状态代码为 201、202、204、205 或 206 的响应。
  2. 不要缓存 HTTP 响应状态码为 4xx 的响应,状态码 403、404 和 410 除外。
  3. 如果响应类型为 FIN 终止,或者响应没有以下属性之一,则不要缓存响应:内容长度或传输编码:分块。
  4. 如果缓存模块无法解析其 Cache-Control 标头,请勿缓存响应。

默认内容组的初始设置

首次启用集成缓存时,NetScaler 设备会提供一个名为默认内容组的预定义内容组。有关详细信息,请参阅 默认内容组设置 表格。

集成缓存的默认设置