更改缓存模式

本页面介绍了如何使用 Cloud CDN 更改缓存模式。您可通过缓存模式配置 Cloud CDN 缓存内容的方式。

准备工作

  • 了解缓存模式和静态内容

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

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

    gcloud components update
    

设置缓存模式

Cloud CDN 提供三种缓存模式,其中定义了响应的缓存方式、Cloud CDN 是否遵循源站发送的缓存指令,以及缓存 TTL 的应用方式。

下表显示了可用的缓存模式:

缓存模式 行为
CACHE_ALL_STATIC 自动缓存包含不是不可缓存的静态内容的成功响应。设置有效缓存指令的源站响应也会进行缓存。

对于使用 Google Cloud CLI 或 REST API 创建的已启用 Cloud CDN 的后端,这是默认行为。

USE_ORIGIN_HEADERS 要求成功的源站响应设置有效的缓存指令和有效的缓存标头。没有这些指令的成功响应会从源站转发。
FORCE_CACHE_ALL 无条件缓存成功响应,并跳过源站设置的任何缓存指令。如果后端为每个用户的专用内容(例如动态 HTML 或 API 响应)提供服务,则此模式不适用。

即使缺少有效的缓存指令,错误响应也可能缓存

在将缓存模式设置为 FORCE_CACHE_ALL 之前,请考虑以下行为:

  • 对于签名网址或签名 CookieFORCE_CACHE_ALL 会替换通过 Google Cloud 控制台中的缓存条目最长存在时间设置或 gcloud --signed-url-cache-max-age 选项指定的最长存在时间。

  • FORCE_CACHE_ALL 会更改任何先前缓存内容的存留时间 (TTL)。此更改可能会导致某些之前被视为新鲜的条目(由于源标头中的 TTL 较长)被视为过时,并可能导致某些之前被视为过时的条目被视为新鲜。

  • FORCE_CACHE_ALL 会替换缓存指令(Cache-ControlExpires),但不会替换其他源响应标头。特别是,即使 Vary 标头存在,FORCE_CACHE_ALL 标头仍然会应用,并且可能会禁止缓存。如需了解详情,请参阅 Vary 标头

如需为已启用 Cloud CDN 的后端配置缓存模式,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往负载均衡页面。

    转到“负载均衡”页面

  2. 点击外部应用负载均衡器的名称。
  3. 点击修改
  4. 后端配置中,选择一个后端,然后点击修改
  5. 确保选择启用 Cloud CDN
  6. 缓存模式下,选择以下选项之一:
    • 缓存静态内容(推荐):静态内容是不会针对每位用户更改的 Web 资源。静态内容基于响应中的 Content-Type。如需了解详情,请参阅静态内容
    • 使用基于 Cache-Control 标头的源站设置:缓存响应标头中含有有效缓存指令的响应。
    • 强制缓存所有内容:缓存由源站传送的所有成功内容,忽略任何 privateno-store 指令。
  7. 点击保存

gcloud

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

对于后端存储桶,请使用带有 --cache-mode 标志的 gcloud compute backend-buckets creategcloud compute backend-buckets update 命令。

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --cache-mode=CACHE_MODE
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --cache-mode=CACHE_MODE

CACHE_MODE 替换为以下项之一:

  • CACHE_ALL_STATIC(默认):自动缓存静态内容。标记为不可缓存的响应(Cache-Control 响应标头中的 privateno-store 指令)不会被缓存。为了缓存动态内容,内容必须具有有效的缓存标头

  • USE_ORIGIN_HEADERS:要求源站设置有效缓存标头以缓存内容。不带这些标头的响应不会在 Google 边缘缓存,且需要根据每个请求完成访问源站的完整行程,这可能会影响源服务器性能并增加其负载。

  • FORCE_CACHE_ALL:缓存所有内容(即成功响应),忽略 Cache-Control 响应标头中的任何 privateno-store 指令。这可能导致缓存特定于每位用户的(可识别用户个人身份信息的)非公开内容。请仅在不会提供非公开内容或动态内容的后端(比如 Cloud Storage 存储桶)中启用此项设置。请勿在提供专用或动态内容的后端中启用此功能。

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": {
  "cacheMode": (CACHE_ALL_STATIC | USE_ORIGIN_HEADERS | FORCE_CACHE_ALL)

CACHE_MODE 替换为以下项之一:

  • CACHE_ALL_STATIC(默认):如果源站未设置有效缓存标头,则自动缓存静态内容。标记为不可缓存的响应(Cache-Control 响应标头中的 privateno-store 指令)不会被缓存。为了缓存动态内容,内容必须具有有效的缓存标头

  • USE_ORIGIN_HEADERS:要求源站设置有效缓存标头以缓存内容。不带这些标头的响应不会在 Google 边缘缓存,且需要根据每个请求完成访问源站的完整行程,这可能会影响源服务器性能并增加其负载。

  • FORCE_CACHE_ALL:缓存所有内容(即成功响应),忽略 Cache-Control 响应标头中的任何 privateno-store 指令。这可能导致缓存特定于每位用户的(可识别用户个人身份信息的)非公开内容。您应仅在不会提供非公开内容或动态内容的后端(比如 Cloud Storage 存储桶)中启用此项设置。