本页面介绍如何使用 Cloud CDN 更改 TTL 替换。通过 TTL 替换,您可以精细控制 Cloud CDN 在将内容缓存多长时间后进行重新验证。
下表总结了 TTL 设置。
默认 TTL | TTL 上限 | 客户端 TTL | |
---|---|---|---|
配置原因 | 提高不频繁更改的内容的缓存命中率 | 强制 Cloud CDN 以高于源站标头指定的频率重新验证内容 | 强制客户端更频繁地针对 Cloud CDN 重新验证内容 |
使用条件 | 对于成功的响应,满足以下任一条件:
|
同时满足以下所有条件:
|
满足以下任一条件:
|
默认值 | 3600 秒(1 小时) | 86400 秒(1 天) | 3600 秒(1 小时) |
允许的最大值 | 31622400 秒(1 年) | 31622400 秒(1 年) | 31622400 秒(1 年) |
备注 | 必须小于或等于最大 TTL--default-ttl=0 强制在源站重新验证响应 |
必须少于或等于最大 TTL |
准备工作
了解缓存模式。
确保已启用 Cloud CDN;如需了解相关说明,请参阅使用 Cloud CDN。
如有必要,请更新到 Google Cloud CLI 的最新版本:
gcloud components update
设置默认 TTL
如需提高不频繁更改的内容的缓存命中率,您可以替换默认 TTL,以降低 Cloud CDN 在源站对内容进行重新验证的频率。请注意,不常访问的对象可能会在定义的 TTL 之前从缓存中逐出。
如果缓存模式为 FORCE_CACHE_ALL
,则默认 TTL 会覆盖所有响应中设置的 TTL(包括由源站标头设置 TTL 的响应)。在此模式下,客户端可以查看默认的 TTL,因为 Cloud CDN 会设置传送给客户端的响应的 public
和 max-age
特性。
对于 CACHE_ALL_STATIC
模式,默认 TTL 适用于源站针对当前不具有有效 TTL(max-age
、s-maxage
或 Expires
标头)的响应传送的缓存内容。在 CACHE_ALL_STATIC
模式下,默认 TTL 不会修改传送给客户端的 Cache-Control
标头。如需在 CACHE_ALL_STATIC
模式下修改 Cache-Control
标头,您必须设置客户端 TTL。
将缓存模式设置为使用源站标头 (USE_ORIGIN_HEADERS
) 时,默认 TTL 值未应用且无法设置,因为 Cloud CDN 改为使用 max-age
或 s-maxage
源站指令或 Expires
标头。
控制台
- 在 Google Cloud Console 中,转到负载均衡页面。
- 点击外部应用负载均衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 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
时使用。允许的最大值为 31622400 秒(1 年)。请注意,不常访问的对象可能会在定义的 TTL 之前从缓存中逐出。
对于 FORCE_CACHE_ALL
,TTL 始终设置为默认 TTL;无法设置 TTL。
控制台
- 在 Google Cloud Console 中,转到负载均衡页面。
- 点击外部应用负载均衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 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
,则 Cloud CDN 的 TTL 和客户端 TTL 值中的较小值会用作发送到浏览器或客户端的 max-age
。
如果源响应中存在 Expires
标头,则标头将被移除,并替换为一个具有适当 TTL 的 Cache-Control: max-age
指令。
对于错误响应,如果未设置负缓存 TTL,则 Cache-Control
标头也会被移除。
由于客户端 TTL 被视为发送到浏览器或客户端的内容的最大值,因此它不能用于增加本应发送的 max-age
值。如果发送到浏览器和客户端的 max-age
值低于您的预期,您必须增加源站返回的响应中的 max-age
指令值,或相应地调整默认 TTL 或负缓存设置。
通常,大约为一天的客户端 TTL 是一个比较实用的上限。设置为一天意味着浏览器至少以该频率进行检查,并且可以了解 Cloud CDN 中可能发生的缓存失效操作。您可以将客户端 TTL 设置为远高于此的值(最长可达一年),从而允许源站和配置的 TTL 完全控制发送到客户端的内容。如果您不希望浏览器针对 Cloud CDN 执行更频繁的验证,这将非常有用。
控制台
- 在 Google Cloud 控制台中,转到负载均衡页面。
- 点击外部应用负载均衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 Cloud CDN。
- 确保缓存模式为缓存静态内容(推荐)或强制缓存所有内容。如果缓存模式为使用基于 Cache-Control 标头的源站设置,则系统不支持替换 TTL 值。
- 在客户端存留时间下,选择一个不超过 1 年的值。
- 点击保存。
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
替换为不超过 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": { "clientTtl": CLIENT_TTL }
将 CLIENT_TTL
替换为不超过 31622400 秒(1 年)的值。
后续步骤
- 要了解提供过时或过期内容的原因,请参阅 提供过时内容。