使用 TTL 设置和替换

本页面介绍了如何将 TTL 替换与 Cloud CDN 搭配使用。通过 TTL 替换,您可以精细控制 Cloud CDN 在将内容缓存多长时间后进行重新验证。

准备工作

  • 了解缓存模式

  • 确保已启用 Cloud CDN;如需了解相关说明,请参阅使用 Cloud CDN

  • 如有必要,请更新到 Cloud SDK 的最新版本:

    gcloud components update
    

设置默认 TTL

如果您将缓存模式设置为缓存所有静态内容 (CACHE_ALL_STATIC) 或不区分内容类型 (FORCE_CACHE_ALL) 的所有内容,内容缓存的默认存留时间 (TTL) 为 3600 秒(1 小时)。

如需提高不频繁更改的内容的缓存命中率,您可以替换默认 TTL,以降低 Cloud CDN 在源站对内容进行重新验证的频率。默认 TTL 允许的最大值为 31622400 秒(1 年)。不常访问的对象可能会在定义的 TTL 之前从缓存中逐出。

将默认 TTL 设置为 0 表示在应用默认 TTL 的情况下,将在源站重新验证响应。

如果您将缓存模式设置为缓存不区分内容类型 (FORCE_CACHE_ALL) 的所有内容,默认的 TTL 会覆盖所有响应中设定的 TTL(包括由源标头设置的 TTL 的响应)。在此模式下,客户端可以查看默认的 TTL,因为 Cloud CDN 会设置传送给客户端的响应的 publicmax-age 特性。

对于 CACHE_ALL_STATIC 模式,默认 TTL 适用于源站针对当前不具有有效 TTL(max-ages-max-ageExpires 标头)的响应传送的缓存内容。在 CACHE_ALL_STATIC 模式下,默认 TTL 不会修改传送给客户端的 Cache-Control 标头。如需在 CACHE_ALL_STATIC 模式下修改 Cache-Control 标头,您必须设置客户端 TTL

将缓存模式设置为使用源站标头 (USE_ORIGIN_HEADERS) 时,默认 TTL 值未应用且无法设置,因为 Cloud CDN 改为使用 max-ages-max-age 源站指令或 Expires 标头。

控制台

  1. 在 Google Cloud Console 中,转到负载平衡页面。

    转到“负载平衡”页面

  2. 点击外部 HTTP(S) 负载平衡器的名称。
  3. 点击修改
  4. 后端配置中,选择一个后端,然后点击修改
  5. 确保选择启用 Cloud CDN
  6. 确保缓存模式为缓存静态内容(推荐)强制缓存所有内容。如果缓存模式为使用基于 Cache-Control 标头的源站设置,则系统不支持替换 TTL 值。
  7. 默认存留时间下,选择一个值。
  8. 点击保存

gcloud

对于后端服务,请使用带有 --default-ttl 标志的 gcloud compute backend-services creategcloud compute backend-services update 命令。

对于后端存储分区,请使用带有 --default-ttl 标志的 gcloud compute backend-buckets creategcloud compute backend-buckets update 命令。

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --default-ttl=DEFAULT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --default-ttl=DEFAULT_TTL

DEFAULT_TTL 替换为不超过 31622400 秒(1 年)的值。

API

对于后端存储分区,请使用 Method: backendBuckets.insertMethod: backendBuckets.update API 调用。

对于后端服务,请使用 Method: backendServices.insertMethod: backendServices.update API 调用。

使用以下 API 调用之一:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "defaultTtl": DEFAULT_TTL
}

DEFAULT_TTL 替换为不超过 31622400 秒(1 年)的值。

设置最大 TTL

最大 (max) TTL 指定由 Cloud CDN 对来源传送的缓存内容允许的最大 TTL。

如果满足以下任一条件,响应的 TTL 将受到最大 TTL 的限制:

  • 响应尝试设置 max-ages-maxage 高于 TTL 值。
  • 响应的 Expires 标头未来超过 cdnPolicy.maxTtl 秒。

最大 TTL 设置不会更改发送给客户端的 max-age 值;如需了解详情,请参阅替换客户端 TTL 上限。最大 TTL 设置仅影响 Cloud CDN 尝试缓存内容的时间。

将缓存模式设置为缓存所有静态内容 (CACHE_ALL_STATIC) 时,默认情况下,内容缓存的 TTL 设置为 86400 秒(1 天)。允许的最大值为 31622400 秒(1 年)。但是,不常访问的对象可能会在定义的 TTL 之前从缓存中逐出。

对于 FORCE_CACHE_ALL,TTL 始终设置为默认 TTL;无法设置 TTL。

TTL 上限的值可以等于或大于默认 TTL 的值。

控制台

  1. 在 Google Cloud Console 中,转到负载平衡页面。

    转到“负载平衡”页面

  2. 点击外部 HTTP(S) 负载平衡器的名称。
  3. 点击修改
  4. 后端配置中,选择一个后端,然后点击修改
  5. 确保选择启用 Cloud CDN
  6. 确保缓存模式为缓存静态内容(推荐)
  7. 最长存留时间下,选择一个值。
  8. 点击保存

gcloud

对于后端服务,请使用带有 --max-ttl 标志的 gcloud compute backend-services creategcloud compute backend-services update 命令。

对于后端存储分区,请使用带有 --max-ttl 标志的 gcloud compute backend-buckets creategcloud compute backend-buckets update 命令。

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --max-ttl=MAX_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --max-ttl=MAX_TTL

MAX_TTL 替换为不超过 31622400 秒(1 年)的值。

API

对于后端存储分区,请使用 Method: backendBuckets.insertMethod: backendBuckets.update API 调用。

对于后端服务,请使用 Method: backendServices.insertMethod: backendServices.update API 调用。

使用以下 API 调用之一:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "maxTtl": MAX_TTL
}

MAX_TTL 替换为不超过 31622400 秒(1 年)的值。

替换客户端 TTL

对于所有缓存模式,Cloud CDN 都会将 Cache-Control 标头传递给客户端。

借助客户端 TTL,您可以为发送到客户端或客户端的内容设置最大 TTL,这样客户端就可以更频繁地针对 Cloud CDN 重新验证内容,而无需在来源执行重新验证。这样,相应内容就在 Cloud CDN 中可以根据需要失效,并且客户端可以发现内容在客户端 TTL 到期后立即失效。

FORCE_CACHE_ALL 模式下,Cloud CDN 通常会将同一 max-age 传递到其用于代理缓存的客户端;但是,如果指定了客户端 TTL 且值较小,则系统会将客户端 TTL 传递给 max-age 指令中的客户端。同样,在 CACHE_ALL_STATIC 模式下,客户端 TTL 充当源服务器指定任何 max-age 的支架,这样发送到浏览器或客户端的 max-age 就不会大于配置的客户端 TTL。如果未指定 max-age,则默认 TTL 和客户端 TTL 值会用作发送到浏览器或客户端的 max-age

客户端 TTL 的值不能大于最大 TTL

如果源响应中存在 Expires 标头,则标头将被移除,并替换为一个具有适当 TTL 的 Cache-Control: max-age 指令。

控制台

  1. 在 Google Cloud Console 中,转到负载平衡页面。

    转到“负载平衡”页面

  2. 点击外部 HTTP(S) 负载平衡器的名称。
  3. 点击修改
  4. 后端配置中,选择一个后端,然后点击修改
  5. 确保选择启用 Cloud CDN
  6. 确保缓存模式为缓存静态内容(推荐)强制缓存所有内容。如果缓存模式为使用基于 Cache-Control 标头的源站设置,则系统不支持替换 TTL 值。
  7. 客户端存留时间下,选择一个不超过 86400 秒的值。
  8. 点击保存

gcloud

对于后端服务,请使用带有 --client-ttl 标志的 gcloud compute backend-services creategcloud compute backend-services update 命令。

对于后端存储分区,请使用带有 --client-ttl 标志的 gcloud compute backend-buckets creategcloud compute backend-buckets update 命令。

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --client-ttl=CLIENT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --client-ttl=CLIENT_TTL

CLIENT_TTL 替换为不超过 86400 秒(1 天)的值。

API

对于后端存储分区,请使用 Method: backendBuckets.insertMethod: backendBuckets.update API 调用。

对于后端服务,请使用 Method: backendServices.insertMethod: backendServices.update API 调用。

使用以下 API 调用之一:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "clientTtl": CLIENT_TTL
}

CLIENT_TTL 替换为不超过 86400 秒(1 天)的值。