本页面介绍了如何将负缓存与 Cloud CDN 搭配使用。借助负缓存,您可以为每个状态代码设置不同的 TTL。
这样做的原因是针对常见错误或重定向应用精细缓存控制。这可减少来源的负载,并通过缩短响应延迟时间来提升最终用户体验。
准备工作
了解缓存模式和静态内容。
确保已启用 Cloud CDN;如需了解相关说明,请参阅使用 Cloud CDN。
如有必要,请更新到 Google Cloud CLI 的最新版本:
gcloud components update
状态代码和默认 TTL
负缓存适用于下表中列出的特定状态代码。
Cloud CDN 会将以下默认 TTL 应用于这些状态代码:
状态代码 | 含义 | TTL |
---|---|---|
HTTP 300 | 多种选择 | 10 分钟 |
HTTP 301 和 308 | 永久重定向 | 10 分钟 |
HTTP 302 和 307 | 临时重定向 | 默认不缓存 |
HTTP 404 | 未找到 | 120 秒 |
HTTP 405 | 找不到方法 | 60 秒 |
HTTP 410 | 已不存在 | 120 秒 |
HTTP 451 | 由于法律原因而无法使用 | 120 秒 |
HTTP 501 | 未实现 | 60 秒 |
您可以替换这些默认值,方法是使用负缓存为指定的 HTTP 状态代码设置缓存 TTL。
设置负缓存
借助负缓存,您可以将服务配置为缓存失败和成功的响应。这样一来,Cloud CDN 就可以防止来自生成错误(例如,404 Not Found)的请求的来源,其使用与防止收到成功响应的请求一样。
控制台
- 在 Google Cloud 控制台中,前往负载均衡页面。
- 点击外部应用负载均衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 Cloud CDN。
- 在窗口底部,点击高级配置。
- 点击启用负缓存。
- 点击添加否定缓存政策。
- 输入 HTTP 状态代码。
- 选择缓存存留时间 (TTL)。
- 点击更新。
- 再次点击更新。
gcloud
对于后端存储桶,请使用带有 --negative-caching
标志的 gcloud compute backend-buckets create 或 gcloud compute backend-buckets update 命令。
对于后端服务,请使用带有 --negative-caching
标志的 gcloud compute backend-services create 或 gcloud compute backend-services update 命令。
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME --negative-caching
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME --negative-caching
例如,如需仅启用两个特定错误响应的负缓存,请将状态代码为 404
的响应设置为缓存 60 秒,将状态代码为 405
的响应设置为缓存 120 秒。
gcloud compute backend-services update BACKEND_SERVICE_NAME \ --negative-caching \ --cache-mode=CACHE_ALL_STATIC \ --default-ttl=86400 \ --negative-caching-policy='404=60,405=120'
API
对于后端存储桶,请使用方法:backendBuckets.insert 或方法:backendBuckets.update API 调用。
对于后端服务,请使用方法:backendServices.insert 或方法: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": { "negativeCaching": ON, "negativeCachingPolicy": [ { "code": STATUS_CODE, "ttl": TTL_SECONDS } ] }
您必须启用负缓存才能配置 negativeCachingPolicy
设置。如果您省略政策并启用 negativeCaching
,则 Cloud CDN 会使用状态代码和默认 TTL 中列出的默认值。
指定负缓存政策时,请务必为您要缓存的所有响应代码指定缓存 TTL。如果存在政策,则 Cloud CDN 不会应用任何默认的负缓存。
对于 STATUS_CODE,您可以指定以下 HTTP 状态代码:
300
、301
、302
、307
、308
404
、405
、410
、421
、451
501
对于每个状态代码,您可以指定缓存响应的秒数。如需为状态代码停用负缓存,请从负缓存政策中排除该代码。
系统允许的最大值为 1800 秒(30 分钟);但是,不常访问的对象可能会在定义的 TTL 之前从缓存中逐出。
如果缓存模式设置为 CACHE_ALL_STATIC
或 USE_ORIGIN_HEADERS
,则负缓存会应用于具有指定响应代码且缺少任何 Cache-Control
或 Expires
标头的响应。
如果缓存模式设置为 FORCE_CACHE_ALL
,则负缓存会替换源站设置的任何缓存标头,并且 Cloud CDN 将在 TTL 指定的时间段内缓存响应,或者如果未设置 TTL,则完全不缓存。
此外,当缓存模式设置为 FORCE_CACHE_ALL
时,Cloud CDN 还会修改 Cache-Control
标头中发送到客户端的 max-age
。特别是,如果给定错误具有已配置的 TTL 设置,则 Cloud CDN 将采用该 TTL 设置和 client_ttl
配置设置中的较小值,并发送包含该值的 Cache-Control: public,max-age=N
标头。如果给定错误没有配置的 TTL 设置,Cloud CDN 将移除源站发送的任何 Cache-Control
标头。Cloud CDN 也会始终移除源站发送的任何 Expires
标头。
如果源站最初启用了负缓存,但随后停用了(手动或通过停用特定响应代码的缓存),则系统仅根据缓存的错误响应的 Cache-Control
或 Expires
标头来判断其是否有效。因此,停用负缓存后,如果响应标头中没有缓存有效期指令,则不会从缓存中传送该响应。
Cloud CDN 会缓存数据以响应 GET
请求。如需了解详情,请参阅可缓存的内容。
每个缓存条目由缓存键标识。
停用负缓存
控制台
- 在 Google Cloud 控制台中,前往负载均衡页面。
- 点击外部应用负载均衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 Cloud CDN。
- 在窗口底部,点击高级配置。
- 取消选中启用负缓存旁边的复选框。
- 点击更新。
- 再次点击更新。
gcloud
对于后端存储桶,请使用带有 --no-negative-caching
标志的 gcloud compute backend-buckets create 或 gcloud compute backend-buckets update 命令。
对于后端服务,请使用带有 --no-negative-caching
标志的 gcloud compute backend-services create 或 gcloud compute backend-services update 命令。
gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME) --no-negative-caching
API
对于后端存储桶,请使用方法:backendBuckets.insert 或方法:backendBuckets.update API 调用。
对于后端服务,请使用方法:backendServices.insert 或方法: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": { "negativeCaching": OFF }