本页面介绍了如何将 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 会设置传送给客户端的响应的 public
和 max-age
特性。
对于 CACHE_ALL_STATIC
模式,默认 TTL 适用于源站针对当前不具有有效 TTL(max-age
、s-max-age
或 Expires
标头)的响应传送的缓存内容。在 CACHE_ALL_STATIC
模式下,默认 TTL 不会修改传送给客户端的 Cache-Control
标头。如需在 CACHE_ALL_STATIC
模式下修改 Cache-Control
标头,您必须设置客户端 TTL。
将缓存模式设置为使用源站标头 (USE_ORIGIN_HEADERS
) 时,默认 TTL 值未应用且无法设置,因为 Cloud CDN 改为使用 max-age
或 s-max-age
源站指令或 Expires
标头。
控制台
- 在 Google Cloud Console 中,转到负载平衡页面。
- 点击外部 HTTP(S) 负载平衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 Cloud CDN。
- 确保缓存模式为缓存静态内容(推荐)或强制缓存所有内容。如果缓存模式为使用基于 Cache-Control 标头的源站设置,则系统不支持替换 TTL 值。
- 在默认存留时间下,选择一个值。
- 点击保存。
gcloud
对于后端服务,请使用带有 --default-ttl
标志的 gcloud compute backend-services
create
或 gcloud compute backend-services
update
命令。
对于后端存储分区,请使用带有 --default-ttl
标志的 gcloud compute backend-buckets
create
或 gcloud 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.insert
或 Method: backendBuckets.update
API 调用。
对于后端服务,请使用 Method: backendServices.insert
或 Method: 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-age
或s-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 的值。
控制台
- 在 Google Cloud Console 中,转到负载平衡页面。
- 点击外部 HTTP(S) 负载平衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 Cloud CDN。
- 确保缓存模式为缓存静态内容(推荐)。
- 在最长存留时间下,选择一个值。
- 点击保存。
gcloud
对于后端服务,请使用带有 --max-ttl
标志的 gcloud compute backend-services
create
或 gcloud compute backend-services
update
命令。
对于后端存储分区,请使用带有 --max-ttl
标志的 gcloud compute backend-buckets
create
或 gcloud 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.insert
或 Method: backendBuckets.update
API 调用。
对于后端服务,请使用 Method: backendServices.insert
或 Method: 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
指令。
控制台
- 在 Google Cloud Console 中,转到负载平衡页面。
- 点击外部 HTTP(S) 负载平衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 Cloud CDN。
- 确保缓存模式为缓存静态内容(推荐)或强制缓存所有内容。如果缓存模式为使用基于 Cache-Control 标头的源站设置,则系统不支持替换 TTL 值。
- 在客户端存留时间下,选择一个不超过 86400 秒的值。
- 点击保存。
gcloud
对于后端服务,请使用带有 --client-ttl
标志的 gcloud compute backend-services
create
或 gcloud compute backend-services
update
命令。
对于后端存储分区,请使用带有 --client-ttl
标志的 gcloud compute backend-buckets
create
或 gcloud 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.insert
或 Method: backendBuckets.update
API 调用。
对于后端服务,请使用 Method: backendServices.insert
或 Method: 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 天)的值。