本页面介绍如何使用 Cloud CDN 提供过时的过期内容。如果来源服务器无法访问或向 Cloud CDN 返回错误,Google Cloud 的全球缓存就可以继续传送内容。
这样做的原因如下:
- 您希望向用户提供过时的内容,而不是向用户返回错误。
- 如果缓存收到刚刚过期的内容的请求,提供过时内容可避免延迟。缓存无需等待后端的同步重新验证,而是提供刚刚过期的过时内容,同时在后台异步验证内容。
stale-while-revalidate
设置可在缓存条目过期期间从缓存中传送指定时间的现有内容(如果有)。
您可以设置 stale-while-revalidate
HTTP 响应标头,以便从来源设置标头。
Cloud CDN 可以代表您设置 cdnPolicy.serveWhileStale
设置。此设置指定响应过期后 Cloud CDN 可继续提供过时版本的时间。默认情况下,此值为 86400s
(1 天)。
serveWhileStale
设置将 stale-while-revalidate
和 stale-if-error
HTTP 缓存功能组合在一起。
默认值、最小值和最大值如下所示:
- 默认值:86,400 秒(一天)
- 最短:0 秒(停用此功能)
- 最大:604,800 秒(一周)
过时内容可在缓存条目到期时间(由 max-age
、s-max-age
或 Expires
标头定义)后发送到指定限制。如需了解详情,请参阅过期时间和验证请求。
如果 Cloud CDN 边缘缓存没有要传送的对象的缓存副本,或者该对象已达到过时的 TTL,则 Cloud CDN 会同步重新向来源验证内容。如果该起点返回错误,则 Cloud CDN 会返回源错误。
客户端 max-stale
请求指令
通过指定 max-stale
缓存控制指令,客户端可以缩短较短的服务时间。如果指定此指令,则此指令控制客户端容忍的过时数量。
如果缓存的内容晚于客户端的 max-stale
值,则 Cloud CDN 会在传送前重新验证该内容。
客户端无法请求 max-stale
值(大于通过 serve-while-stale
配置选项以及来自源的 stale-while-revalidate
缓存控制指令配置的值)。
准备工作
了解缓存模式和静态内容。
确保已启用 Cloud CDN;如需了解相关说明,请参阅使用 Cloud CDN。
如有必要,请更新到 Cloud SDK 的最新版本:
gcloud components update
在重新验证时提供过时内容
控制台
- 在 Google Cloud Console 中,转到负载平衡页面。
- 点击外部 HTTP(S) 负载平衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保选择启用 Cloud CDN。
- 在窗口底部,点击高级配置。
- 在在服务过时时提供下,选择以下选项之一:
- 1 分钟
- 5 分钟
- 10 分钟
- 30 分钟
- 1 天(建议)
- 7 天
- 点击更新。
- 再次点击更新。
gcloud
对于后端存储分区,请使用带有 --serve-while-stale
标志的 gcloud beta compute backend-buckets create 或 gcloud beta compute backend-buckets update 命令。
对于后端服务,请使用带有 --serve-while-stale
标志的 gcloud beta compute backend-services create 或 gcloud beta compute backend-services update 命令。
gcloud beta compute backend-buckets (create | update) BACKEND_BUCKET_NAME --serve-while-stale=SECONDS
gcloud beta compute backend-services (create | update) BACKEND_SERVICE_NAME --serve-while-stale=SECONDS
例如:
gcloud beta compute backend-services update my-backend-service --serve-while-stale=180s
API
对于后端存储分区,请使用方法:backendBuckets.insert 或方法:backendBuckets.update API 调用。
对于后端服务,请使用方法:backendServices.insert 或方法:backendServices.update API 调用。
使用以下 API 调用之一:
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
将以下代码段添加到 JSON 请求正文:
"cdnPolicy": { "serveWhileStale": SECONDS }
停用提供过时内容的功能
控制台
- 在 Google Cloud Console 中,转到负载平衡页面。
- 点击外部 HTTP(S) 负载平衡器的名称。
- 点击修改 。
- 在后端配置中,选择一个后端,然后点击修改 。
- 确保未选中启用 Cloud CDN。
- 在窗口底部,点击高级配置。
- 在在过时时提供下,选择在过时时停用服务。
- 点击更新。
- 再次点击更新。
gcloud
对于后端存储分区,请使用带有 --no-serve-while-stale
标志的 gcloud beta compute backend-buckets create 或 gcloud beta compute backend-buckets update 命令。
对于后端服务,请使用带有 --no-serve-while-stale
标志的 gcloud beta compute backend-services create 或 gcloud beta compute backend-services update 命令。
gcloud beta compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME) --no-serve-while-stale
API
对于后端存储分区,请使用方法:backendBuckets.insert 或方法:backendBuckets.update API 调用。
对于后端服务,请使用方法:backendServices.insert 或方法:backendServices.update API 调用。
使用以下 API 调用之一:
POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendBuckets PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices PUT https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE
将以下代码段添加到 JSON 请求正文:
"cdnPolicy": { "serveWhileStale": 0 }