自定义缓存键

本页面介绍如何自定义 Cloud CDN 缓存键。

如果新请求开始使用与旧缓存键条目不同的缓存键,则更改缓存键配置后,可能会导致缓存命中率突然下降。同样,如果新请求使用与旧缓存键相同的键,则更改缓存键创建者后,并不一定会使缓存条目失效。要使现有缓存条目失效,请参阅使缓存内容失效

准备工作

本页面假定您了解 Cloud CDNCloud CDN 缓存键和具有负载平衡的后端服务。我们建议您在继续之前参阅这些页面。

启用 Cloud CDN 并自定义缓存键

以下说明介绍如何为负载均衡的后端服务激活 Cloud CDN,并自定义缓存键。如果您还没有用作源站的负载均衡器,请参阅外部应用负载均衡器文档,了解如何创建负载均衡器。

后端存储桶不包含缓存键中的协议或主机,因为它们不会影响对象在 Cloud Storage 存储桶中的引用方式。但是,后端存储桶包含一组 Cloud Storage 特有的查询字符串参数,这些参数可能会影响响应,并且可以通过可自定义的参数名称列表进行扩展。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud CDN 页面。

    转到 Cloud CDN

  2. 点击要更新的源站的名称。

  3. 点击修改

    如果该源站附加了多个负载均衡器,请从修改菜单中选择要更新的负载均衡器。

  4. 如需展开缓存性能部分,请点击下一步

  5. 缓存键部分,选择自定义

  6. 缓存键组成部分部分,默认情况下,所有组成部分均处于选中状态。取消选中要从缓存键中排除的任何组成部分对应的复选框。

  7. 点击完成

gcloud

如需从后端服务的缓存键中排除一个或多个组成部分,请使用 gcloud compute backend-services update 命令

gcloud compute backend-services update BACKEND_SERVICE \
    --no-cache-key-include-protocol \
    --no-cache-key-include-host \
    --no-cache-key-include-query-string

对于后端存储桶,请使用 gcloud compute backend-buckets update 命令

API

如需从缓存键中排除一个或多个组成部分,请在 backendServices 资源cdnPolicy 部分的 cacheKeyPolicy 中指定配置选项。

对于后端服务,请使用 backendServices.update 方法 API 调用。

PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

对于后端存储桶,请使用 backendBuckets.update 方法 API 调用。

PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET

将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "cacheKeyPolicy": [
    {
      "includeProtocol": false,
      "includeHost": false,
      "includeQueryString": false
    }
  ]
}

更新缓存键以添加协议、主机和查询字符串

默认情况下,配置为使用 Cloud CDN 的后端服务会在缓存键中包含请求 URI 的所有组成部分。如果您之前已指明应排除一个或多个组成部分,则可以执行以下步骤来再次包含这些组成部分。

以下说明介绍如何将协议、主机和查询字符串添加到已启用 Cloud CDN 的现有后端服务的缓存键中。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud CDN 页面。

    转到 Cloud CDN

  2. 点击要更新的源站的名称。

  3. 点击修改

    如果该源站附加了多个负载均衡器,请从修改菜单中选择要更新的负载均衡器。

  4. 如需展开缓存性能部分,请点击下一步

  5. 缓存键部分,选择自定义

  6. 缓存键组成部分部分中,选中协议主机查询字符串复选框。

  7. 点击完成

gcloud

如需向后端服务的缓存键添加一个或多个组成部分,请使用 gcloud compute backend-services update 命令。

任何未指定的标志都将保持不变。

gcloud compute backend-services update BACKEND_SERVICE \
    --cache-key-include-protocol \
    --cache-key-include-host \
    --cache-key-include-query-string

API

如需向缓存键添加一个或多个组成部分,请在 backendServices 资源的 cdnPolicycacheKeyPolicy 部分中指定配置选项。

将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "cacheKeyPolicy": [
    {
      "includeProtocol": true,
      "includeHost": true,
      "includeQueryString": true
    }
  ]
}

更新缓存键以使用查询字符串参数的包含列表或排除列表

以下说明会将 Cloud CDN 缓存键设置为使用查询字符串参数的包含列表或排除列表。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud CDN 页面。

    转到 Cloud CDN

  2. 点击要更新的源站的名称。

  3. 点击修改

    如果该源站附加了多个负载均衡器,请从修改菜单中选择要更新的负载均衡器。

  4. 如需展开缓存性能部分,请点击下一步

  5. 缓存键部分,选择自定义

  6. 缓存键组成部分部分中,选中查询字符串复选框。然后,选择以下任一选项:

    • 如果您想指定必须包含在缓存键中的查询字符串参数,请选择仅包含所选项

    • 如果您想指定在缓存键中包含除了您列出的参数以外的所有查询字符串参数,请选择包含除所选项之外的所有项

  7. 点击添加参数并指定参数。

  8. 点击完成

gcloud

如需为后端服务指定包含列表或排除列表,请使用 gcloud compute backend-services update 命令指定查询字符串参数。

使用以下命令可将查询字符串参数 user 设置为后端服务的包含列表。

gcloud compute backend-services update BACKEND_SERVICE \
    --cache-key-include-query-string \
    --cache-key-query-string-whitelist user

使用以下命令可将查询字符串参数 user 设置为后端服务的排除列表。

gcloud compute backend-services update BACKEND_SERVICE \
    --cache-key-include-query-string \
    --cache-key-query-string-blacklist user

使用以下命令可将查询字符串参数 user 设置为后端存储桶的包含列表。

gcloud compute backend-buckets update BACKEND_BUCKET \
    --cache-key-query-string-whitelist user

API

如需为后端服务指定包含列表或排除列表,请在 backendServices 资源的 cdnPolicycacheKeyPolicy 部分中指定查询字符串参数。

如需指定包含列表,请将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "cacheKeyPolicy": [
    {
      "queryStringWhitelist": [QUERY_STRINGS]
    }
  ]
}

QUERY_STRINGS 替换为以英文逗号分隔的查询字符串参数列表。

如需指定排除列表,请添加以下代码段:

"cdnPolicy": {
  "cacheKeyPolicy": [
    {
      "queryStringBlacklist": [QUERY_STRINGS]
    }
  ]
}

更新缓存键以使用 HTTP 标头

以下说明介绍如何将 Cloud CDN 缓存键设置为使用 HTTP 标头,其中可以包含允许的自定义变量

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud CDN 页面。

    转到 Cloud CDN

  2. 点击要更新的源站的名称。/

  3. 点击修改

    如果该源站附加了多个负载均衡器,请从修改菜单中选择要更新的负载均衡器。

  4. 如需展开缓存性能部分,请点击下一步

  5. 缓存键部分,选择自定义

  6. 缓存键组成部分部分中,选中 HTTP 标头复选框。

  7. 如需指定一个或多个 HTTP 标头,请点击添加 HTTP 标头

  8. 点击完成

gcloud

使用带有 cache-key-include-http-header 选项的 gcloud compute backend-services update 命令。

gcloud compute backend-services update BACKEND_SERVICE \
    --cache-key-include-http-header=[HEADER_FIELD_NAMES,...]

HEADER_FIELD_NAMES 替换为以英文逗号分隔的标头名称列表。

API

backendServices 资源的 cdnPolicycacheKeyPolicy 部分中,为缓存键指定 HTTP 标头。

将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "cacheKeyPolicy": [
    {
      "includeHttpHeaders": [HEADER_FIELD_NAMES]
    }
  ]
}

HEADER_FIELD_NAMES 替换为以英文逗号分隔的标头名称列表。

如果指定的缓存键标头也被指定为自定义请求标头,则只能使用部分适用范围内的变量

如需了解详情,请参阅将自定义变量与请求标头搭配使用

更新缓存键以使用已命名 Cookie

以下指令集将 Cloud CDN 缓存键设置为使用 HTTP Cookie。

控制台

  1. 在 Google Cloud 控制台中,前往 Cloud CDN 页面。

    转到 Cloud CDN

  2. 点击要更新的源站的名称。

  3. 点击修改

    如果该源站附加了多个负载均衡器,请从修改菜单中选择要更新的负载均衡器。

  4. 如需展开缓存性能部分,请点击下一步

  5. 缓存键部分,选择自定义

  6. 缓存键组成部分部分中,选中已命名 Cookie 复选框。

  7. 如需指定一个或多个 Cookie,请点击添加已命名 Cookie

  8. 点击完成

gcloud

使用带有 cache-key-include-named-cookie 选项的 gcloud compute backend-services update 命令。

gcloud compute backend-services update BACKEND_SERVICE \
    --cache-key-include-named-cookie=[NAMED_COOKIES,...]

NAMED_COOKIES 替换为以英文逗号分隔的已命名 Cookie 列表。

API

如需为后端服务指定包含列表或排除列表,请在 backendServices 资源的 cdnPolicycacheKeyPolicy 部分中指定查询字符串参数。

如需指定包含列表,请将以下代码段添加到 JSON 请求正文:

"cdnPolicy": {
  "cacheKeyPolicy": [
    {
      "includeNamedCookies": [NAMED_COOKIES]
    }
  ]
}

NAMED_COOKIES 替换为以英文逗号分隔的查询字符串参数列表。

后续步骤