控制缓存密钥 - Amazon CloudFront
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

控制缓存密钥

带有 Amazon CloudFront,您可以控制 缓存密钥 对于缓存在 CloudFront 边缘位置。缓存密钥是缓存中每个对象的唯一标识符,它决定了查看器请求是否会导致 缓存命中. 当查看器请求与先前请求生成同一个缓存密钥时,会发生缓存命中,该缓存密钥的对象位于Edge位置缓存并有效。当缓存命中时,对象将从一个来自一个来自一个的视图中的 CloudFront 边缘位置,具有以下优势:

  • 减少原始服务器上的负载

  • 减少查看器延迟

您可以在更高的时间内从网站或应用程序获得更好的性能 缓存命中率 (查看器请求比例较高导致缓存命中)。改善缓存命中率的一种方法是仅包括缓存密钥中的最小必要值。有关更多信息,请参阅 了解缓存密钥。)

要控制缓存密钥,您使用 CloudFront 缓存策略. 您将缓存策略附加到一个或多个缓存行为 CloudFront 分销。

了解缓存策略

您可以使用缓存策略来控制缓存密钥(包括在缓存密钥)中的值(URL查询字符串、HTTP标头和cookies)来改善缓存命中率。 CloudFront 提供一些预定义的缓存策略,称为 管理策略,用于常用用例。您可以使用这些管理的策略,或者您可以创建特定于您需求的缓存策略。有关管理策略的更多信息,请参阅 使用管理缓存策略.

缓存策略包含以下设置,该设置分类为 政策信息现场时间(TTL)设置,和 缓存密钥设置.

策略信息

姓名

标识缓存策略的名称。在控制台中,使用名称将缓存策略附加到缓存行为。

Comment (注释)

描述缓存策略的备注。这是可选的,但它可以帮助您识别缓存策略的目的。

现场时间(TTL)设置

现场直播设置与 Cache-ControlExpires HTTP标头(如果它们位于原始响应中),以确定对象在 CloudFront 缓存仍然有效。

最小 TTL

您希望对象保持在 CloudFront 缓存之前 CloudFront 与原始检查以查看对象是否已更新。有关更多信息,请参阅 管理内容保留在边缘缓存中的时间长度(过期)。)

最大 TTL

对象保留在 CloudFront 缓存之前 CloudFront 与原始检查以查看对象是否已更新。 CloudFront 仅当原始发送时使用此设置 Cache-ControlExpires 对象标题。有关更多信息,请参阅 管理内容保留在边缘缓存中的时间长度(过期)。)

默认 TTL

您希望对象保留在 CloudFront 缓存之前 CloudFront 与原始检查以查看对象是否已更新。 CloudFront 仅当原始位置的对象值时,将此设置值用作对象TTL 不是 发送 Cache-ControlExpires 对象标题。有关更多信息,请参阅 管理内容保留在边缘缓存中的时间长度(过期)。)

缓存密钥设置

缓存密钥设置指定查看器中的值 CloudFront 包括在缓存密钥中。值可以包括URL查询字符串、HTTP标头和cookies。在缓存密钥中包含的值将自动包含在请求中 CloudFront 发送至原点,称为 起始请求. 有关控制原始请求的信息,请参阅缓存密钥,参阅 控制起始请求.

查询字符串

查看器中的URL查询字符串请求 CloudFront 包括在缓存密钥和原始请求中。对于查询字符串,您可以选择以下设置之一:

  • – 查看器请求中的查询字符串是 不是 包括在缓存密钥中,并且 不是 自动包含在原始请求中。

  • 全部 – 查看器请求中的所有查询字符串都包含在缓存密钥中,并且也会自动包含在原始请求中。

  • 白名单 – 您指定了查看器请求中的查询字符串中的哪个字符串包含在缓存密钥中,并自动包含在原始请求中。

  • 除外全部 – 您指定查看器请求中的查询字符串中的哪个字符串 不是 包括在缓存密钥中,并且 不是 自动包含在原始请求中。所有其他查询字符串,都要对您指定的所有其他查询字符串进行预期的操作, 包含在缓存密钥中,并自动包含在原始请求中。

当您使用 白名单除外全部 设置,您可以按其名称指定查询字符串,而不是他们的值。例如,考虑以下URL路径:

/content/stories/example-story.html?split-pages=false

在这种情况下,您将查询字符串指定为 split-pages,不是 split-pages=false...但是, CloudFront 包括在缓存密钥和原始请求中的完整查询字符串(包括其值)。

Headers

查看器中的HTTP标头请求 CloudFront 包括在缓存密钥和原始请求中。对于标题,您可以选择以下设置之一:

  • – 查看器请求中的HTTP标头是 不是 包括在缓存密钥中,并且 不是 自动包含在原始请求中。

  • 白名单 – 您指定了在缓存密钥中包含的查看器请求中的HTTP头中的中哪个HTTP头包含在原始请求中。

当您使用 白名单 设置,您可以按其名称指定HTTP标头,而不是他们的值。例如,考虑以下HTTP标头:

Accept-Language: en-US,en;q=0.5

在这种情况下,您将标题指定为 Accept-Language,不是 Accept-Language: en-US,en;q=0.5...但是, CloudFront 包括在缓存密钥和原始请求中的完整标题(包括其值)。

您还可以包括某些标题,而这些标题由 CloudFront 在缓存密钥中。有关更多信息,请参阅 使用 CloudFront HTTP标头。)

Cookies

查看器中的Cookie请求 CloudFront 包括在缓存密钥和原始请求中。对于Cookie,您可以选择以下设置之一:

  • – 查看器请求中的Cookie是 不是 包括在缓存密钥中,并且 不是 自动包含在原始请求中。

  • 全部 – 查看器请求中的所有Cookie都包含在缓存密钥中,并且自动包含在原始请求中。

  • 白名单 – 您指定了在缓存密钥中包含的cookie中的cookie中哪些cookie会被包含在原始请求中。

  • 除外全部 – 您指定查看器请求中的Cookie中的 不是 包括在缓存密钥中,并且 不是 自动包含在原始请求中。所有其他cookie,希望您指定的是, 包含在缓存密钥中,并自动包含在原始请求中。

当您使用 白名单除外全部 设置,您可以按其名称指定cookie,而不是他们的值。例如,考虑以下内容 Cookie 标题:

Cookie: session_ID=abcd1234

在这种情况下,您将该Cookie指定 session_ID,不是 session_ID=abcd1234...但是, CloudFront 包括在缓存密钥和原始请求中的完整cookie(包括其值)。

缓存压缩对象(使用 Accept-Encoding 标题)

此设置启用 CloudFront 要请求和缓存对象,请在 gzip 按压格式,当查看器支持时。观众表示他们对他们的支持 gzip 编码,通过使用 Accept-Encoding HTTP标头。

如果以下任一项都是正确的,请启用此设置:

  • 您的原始服务器返回 gzip 对包含 Accept-Encoding: gzip HTTP标头。

  • 此缓存策略附加到的缓存行为已配置为 CloudFront 边缘压缩.

如果您的原始服务器未返回 gzip 已编码对象,或缓存行为未配置 CloudFront 边缘压缩,不要启用此设置。如果您做到,可能会导致错误的增加返回查看器。

以下内容解释了此设置如何影响A CloudFront 分销:

启用此设置时

启用此设置时, CloudFront 行为取决于查看器请求是否包括 Accept-Encoding HTTP标头。

  • 当查看器请求时 不是 包括 Accept-Encoding 标题:

    • CloudFront 在缓存密钥中不包括此标头。

    • CloudFront 不会在相应的起始请求中包含此标头。

  • 查看器请求时 做了 包括 Accept-Encoding 标题, CloudFront 行为取决于是否 gzip 是标题值之一。

    • 当WhenWhen gzip 标题值之一:

      • CloudFront 包括 Accept-Encoding: gzip 在缓存密钥中。

      • CloudFront 包括 Accept-Encoding: gzip 在相应的起始请求中。其他值为 Accept-Encoding 查看器发送的标题不包含。

    • 当WhenWhen gzip不是 标题值之一:

      • CloudFront 在缓存密钥中不包括此标头。

      • CloudFront 包括 Accept-Encoding: identity 在相应的起始请求中。其他值为 Accept-Encoding 查看器发送的标题不包含。

注意

启用此设置时,不要包括 Accept-Encoding 标题中的 起运地请求政策 与同一缓存行为相关联。 CloudFront 当启用此设置时,始终将此标题包括在原始请求中,所以,包括 Accept-Encoding 在原始请求政策中,没有影响。

禁用此设置时

当此设置被禁用时, CloudFront 处理 Accept-Encoding 标题与查看器请求中的任何其他HTTP标头相同。默认情况下,缓存密钥中不包含该密钥,而且它不包含在原始请求中。您可以将其包含在缓存策略中的标题白名单或其他HTTP标头的起始请求策略中。

创建缓存策略

您可以使用缓存策略来控制缓存密钥(包括在缓存密钥)中的值(URL查询字符串、HTTP标头和cookies)来改善缓存命中率。您可以在 CloudFront 控制台,带 AWS Command Line Interface (AWS CLI),或与 CloudFront API。

创建缓存策略后,将其附加到一个或多个缓存行为 CloudFront 分销。

创建缓存策略(控制台)

  1. 登录 AWS 管理控制台 并打开 政策 页面中的 CloudFront 控制台 https://console.amazonaws.cn/cloudfront/v2/home?#/policies.

  2. 选择 创建缓存策略.

  3. 选择此缓存策略的所需设置。有关更多信息,请参阅 了解缓存策略。)

  4. 完成后,选择 创建缓存策略.

创建缓存策略后,可以将其附加到缓存行为。

将缓存策略附加到现有分布(控制台)

  1. 打开 分配 页面中的 CloudFront 控制台 https://console.amazonaws.cn/cloudfront/home#distributions:.

  2. 选择要更新的分布,然后选择 行为 选项卡。

  3. 选择要更新的缓存行为,然后选择 编辑.

    或者,要创建新的缓存行为,请选择 创建行为.

  4. 对于 缓存和原始请求设置,确保 使用缓存策略和原始请求策略 已选择。

  5. 对于 缓存策略,选择要连接到此缓存行为的缓存策略。

  6. 在页面底部,选择 是,编辑.

将缓存策略附加到新分发(控制台)

  1. 访问 https://console.amazonaws.cn/cloudfront/home,打开 CloudFront 控制台。

  2. 选择 创建分布,然后 网络,选择 开始.

  3. 对于 缓存和原始请求设置,确保 使用缓存策略和原始请求策略 已选择。

  4. 对于 缓存策略,选择要连接到此分发默认缓存行为的缓存策略。

  5. 选择所需的原始设置、默认缓存行为和分布。有关更多信息,请参阅 您创建或更新分配时指定的值。)

  6. 完成后,选择 创建分布.

要创建缓存策略,请与 AWS Command Line Interface (AWS CLI),使用 aws cloudfront create-cache-policy 命令。您可以使用输入文件提供命令输入参数,而不是将每个单独参数指定为命令行输入。

要创建缓存策略(包含输入文件的CLI)

  1. 使用以下命令创建名为 cache-policy.yaml 包含所有输入参数的内容 create-cache-policy 命令。

    aws cloudfront create-cache-policy --generate-cli-skeleton yaml-input > cache-policy.yaml
    注意

    TheThethe yaml-input 选项仅在 第2版 AWS CLI. 第1版的第1版 AWS CLI,您可以生成以JSON格式生成的输入文件。有关详细信息,请参阅 从JSON或YAML输入文件生成AWSCLI骨架和输入参数AWS Command Line Interface 用户指南.

  2. 打开名为 cache-policy.yaml 您刚刚创建的。编辑文件以指定要使用的缓存策略设置,然后保存文件。您可以从文件中删除可选字段,但不要删除必填字段。

    有关缓存策略设置的详细信息,请参阅 了解缓存策略.

  3. 使用以下命令来创建缓存策略,使用来自 cache-policy.yaml 文件。

    aws cloudfront create-cache-policy --cli-input-yaml file://cache-policy.yaml

    记下注意事项 Id 命令输出中的值。这是缓存策略ID,您需要它将缓存策略附加到 CloudFront 分发缓存行为。

将缓存策略附加到现有分发的一个已有分布(包含输入文件的CLI)

  1. 使用以下命令保存分配配置 CloudFront 您要更新的分布。Replace distribution_ID 配送ID。

    aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
    注意

    TheThethe --output yaml 选项仅在 第2版 AWS CLI. 第1版的第1版 AWS CLI,您可以生成以JSON格式输出的输出。有关详细信息,请参阅 控制AWSCLI中的命令输出AWS Command Line Interface 用户指南.

  2. 打开名为 dist-config.yaml 您刚刚创建的。编辑文件,对要更新的每个缓存行为进行以下更改,以使用缓存策略。

    • 在缓存行为中,添加名为 CachePolicyId...对于字段值,请使用创建策略后注意到的缓存策略ID。

    • 删除 MinTTLMaxTTLDefaultTTL,和 ForwardedValues 缓存行为的字段。这些设置在缓存策略中指定,因此您不能在同一缓存行为中包含这些字段和缓存策略。

    • 重命名 ETag 字段至 IfMatch,但不要更改字段值。

    完成后保存文件。

  3. 使用以下命令更新分发以使用缓存策略。Replace distribution_ID 配送ID。

    aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml

将缓存策略附加到新分发中(包含输入文件的CLI)

  1. 使用以下命令创建名为 distribution.yaml 包含所有输入参数的内容 create-distribution 命令。

    aws cloudfront create-distribution --generate-cli-skeleton yaml-input > distribution.yaml
    注意

    TheThethe yaml-input 选项仅在 第2版 AWS CLI. 第1版的第1版 AWS CLI,您可以生成以JSON格式生成的输入文件。有关详细信息,请参阅 从JSON或YAML输入文件生成AWSCLI骨架和输入参数AWS Command Line Interface 用户指南.

  2. 打开名为 distribution.yaml 您刚刚创建的。在默认缓存行为中, CachePolicyId 字段,输入创建策略后注意到的缓存策略ID。继续编辑文件以指定您想要的分发设置,然后在完成后保存文件。

    有关分发设置的详细信息,请参阅 您创建或更新分配时指定的值.

  3. 使用以下命令来创建使用来自 distribution.yaml 文件。

    aws cloudfront create-distribution --cli-input-yaml file://distribution.yaml

要创建缓存策略,请与 CloudFront API,使用 创建策略策略. 有关在此API调用中指定的字段的更多信息,请参阅 了解缓存策略 以及AWSSDK或其他API客户端的API参考文档。

创建缓存策略后,可以使用以下API调用之一将其附加到缓存行为:

  • 要将其附加到现有分布中的缓存行为,请使用 更新分配.

  • 要将其附加到新分布中的缓存行为,请使用 创建分布.

对于这两个API调用,请在以下内容中提供缓存策略ID CachePolicyId 字段,在缓存行为内。有关在这些API调用中指定的其他字段的更多信息,请参阅 您创建或更新分配时指定的值 以及AWSSDK或其他API客户端的API参考文档。