控制源请求 - Amazon CloudFront

控制源请求

当发送到 CloudFront 的查看器请求导致缓存未命中(请求的对象未在边缘站点缓存)时,CloudFront 会向源发送请求以检索对象。这称为源请求。源请求始终包含来自查看器请求的以下信息:

  • URL 路径(仅路径,不包含 URL 查询字符串或域名)

  • 请求正文(如果有)

  • CloudFront 在每个源请求中自动包含的 HTTP 标头,包括 HostUser-AgentX-Amz-Cf-Id

默认情况下,查看器请求中的其他信息(如 URL 查询字符串、HTTP 标头和 Cookie)不包含在源请求中。但是,您可能希望在源处接收其他一些此类信息,例如收集数据以进行分析或遥测。您可以使用源请求策略 控制源请求中包含的信息。

源请求策略与控制缓存键的缓存策略是分开的。通过这种分离,您能够在源处接收其他信息,并保持良好的缓存命中率(导致缓存命中的查看器请求比例)。您可以通过单独控制哪些信息包含在源请求中(使用源请求策略)以及哪些信息包含在缓存键中(使用缓存策略)来做到这一点。

虽然这两种策略是分开的,但它们却相关联。您在缓存键中包含的所有 URL 查询字符串、HTTP 标头和 Cookie(使用缓存策略)都将自动包含在源请求中。使用源请求策略指定要包含在源请求中但 包含在缓存键中的信息。与缓存策略一样,您可以将源请求策略附加到 CloudFront 分配中的一个或多个缓存行为。

还可以使用源请求策略将其他 HTTP 标头添加到查看器请求中未包含的源请求。这些附加标头是 CloudFront 在发送源请求之前添加的,而标头值是根据查看器请求自动确定的。有关更多信息,请参阅 添加 CloudFront HTTP 标头

创建源请求策略

您可以使用源请求策略控制包含在 CloudFront 发送到源的请求中的值(URL 查询字符串、HTTP 标头和 Cookie)。您可以使用 AWS Command Line Interface (AWS CLI) 或 CloudFront API 在 CloudFront 控制台中创建源请求策略。

创建源请求策略后,可以将它附加到 CloudFront 分配中的一个或多个缓存行为。

源请求策略不是必需的。如果缓存行为未附加源请求策略,则源请求只会包含缓存策略中指定的所有值。

注意

要使用源请求策略,缓存行为还必须使用缓存策略。如果没有缓存策略,则无法在缓存行为中使用源请求策略。

Console

创建源请求策略(控制台)

  1. 登录到 AWS Management Console 并通过以下网址在 CloudFront 控制台中打开 Policies (策略) 页面:https://console.aws.amazon.com/cloudfront/v3/home?#/policies

  2. 选择 Origin request(源请求),然后选择 Create origin request policy(创建源请求策略)。

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

  4. 完成后,选择 Create(创建)。

创建源请求策略后,可以将它附加到缓存行为。

将源请求策略附加到现有分配(控制台)

  1. 在 CloudFront 控制台中打开 Distributions (分配) 页面,网址为 https://console.aws.amazon.com/cloudfront/v3/home#/distributions

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

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

    或者,要创建新的缓存行为,请选择 Create behavior(创建行为)。

  4. Cache key and origin requests(缓存键和源请求)区域,请确保选择了 Cache policy and origin request policy(缓存策略和源请求策略)。

  5. 对于 Origin request policy(源请求策略),选择要附加到此缓存行为的源请求策略。

  6. 在页面底部,选择 Save changes(保存更改)。

将源请求策略附加到新分配(控制台)

  1. 通过 打开 CloudFront 控制台https://console.aws.amazon.com/cloudfront/v3/home

  2. 选择 Create distribution(创建分配)。

  3. Cache key and origin requests(缓存键和源请求)区域,请确保选择了 Cache policy and origin request policy(缓存策略和源请求策略)。

  4. 对于 Origin request policy(源请求策略),选择要附加到此分配的原定设置缓存行为的源请求策略。

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

  6. 完成后,选择 Create distribution(创建分配)。

CLI

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

创建源请求策略(带输入文件的 CLI)

  1. 使用以下命令创建名为 origin-request-policy.yaml 的文件,其中包含 create-origin-request-policy 命令的所有输入参数。

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

    yaml-input 选项仅适用于 AWS CLI 版本 2。利用版本 1 的 AWS CLI,您可以生成 JSON 格式的输入文件。有关更多信息,请参阅 AWS Command Line Interface 用户指南中的从 JSON 或 YAML 输入文件生成 AWS CLI 骨架和输入参数

  2. 打开刚创建的名为 origin-request-policy.yaml 的文件。编辑该文件以指定所需的源请求策略设置,然后保存该文件。您可以从该文件中删除可选字段,但不要删除必填字段。

    有关源请求策略设置的更多信息,请参阅了解源请求策略

  3. 使用以下命令通过 origin-request-policy.yaml 文件中的输入参数创建源请求策略。

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

    记下命令输出中的 Id 值。这是源请求策略 ID,您需要它才能将源请求策略附加到 CloudFront 分配的缓存行为。

将源请求策略附加到现有分配(带输入文件的 CLI)

  1. 使用以下命令保存要更新的 CloudFront 分配的分配配置。将 distribution_ID 替换为分配的 ID。

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

    --output yaml 选项仅适用于版本 2 的 AWS CLI。利用版本 1 的 AWS CLI,您可以生成 JSON 格式的输出。有关更多信息,请参阅 AWS Command Line Interface 用户指南中的从 AWS CLI 控制命令输出

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

    • 在缓存行为中,添加名为 OriginRequestPolicyId 的字段。对于字段的值,请使用创建策略后记下的源请求策略 ID。

    • ETag 字段重命名为 IfMatch,但不更改字段的值。

    完成后保存该文件。

  3. 使用以下命令更新分配以使用源请求策略。将 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
    注意

    yaml-input 选项仅适用于 AWS CLI 版本 2。利用版本 1 的 AWS CLI,您可以生成 JSON 格式的输入文件。有关更多信息,请参阅 AWS Command Line Interface 用户指南中的从 JSON 或 YAML 输入文件生成 AWS CLI 骨架和输入参数

  2. 打开刚创建的名为 distribution.yaml 的文件。在默认缓存行为中,在 OriginRequestPolicyId 字段中输入创建策略后记下的源请求策略 ID。继续编辑该文件以指定所需的分配设置,然后在完成后保存该文件。

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

  3. 使用以下命令通过 distribution.yaml 文件中的输入参数创建分配。

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

要使用 CloudFront API 创建源请求策略,请使用 CreateOriginRequestPolicy。有关您在此 API 调用中指定的字段的更多信息,请参阅 了解源请求策略 以及 AWS 开发工具包或其他 API 客户端的 API 参考文档。

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

对于这两个 API 调用,请在缓存行为中的 OriginRequestPolicyId 字段中提供源请求策略的 ID。有关您在这些 API 调用中指定的其他字段的更多信息,请参阅 您创建或更新分配时指定的值 以及 AWS 开发工具包或其他 API 客户端的 API 参考文档。

了解源请求策略

CloudFront 为常见使用案例提供了一些预定义的源请求策略(称为托管策略)。您可以使用这些托管策略,也可以创建特定于您的需求的源请求策略。有关托管策略的更多信息,请参阅使用托管源请求策略

源请求策略包含以下设置,这些设置的分类如下:策略信息源请求设置

策略信息

名称

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

描述

描述源请求策略的注释。该项为可选项。

源请求设置

源请求设置指定查看器请求中包含的值,这些值包含在 CloudFront 发送到源的请求(称为源请求)中。这些值可以包括 URL 查询字符串、HTTP 标头和 Cookie。您指定的值包含在源请求中,但不会包含在缓存键中。有关控制缓存键的信息,请参阅控制缓存键

标头

CloudFront 包含在源请求中的查看器请求中的 HTTP 标头。对于标头,您可以选择下列设置之一:

  • – 查看器请求中的 HTTP 标头 会包含在源请求中。

  • 所有查看器标头 – 查看器请求中的所有 HTTP 标头都包含在源请求中。

  • Include the following headers(包含以下标头)– 您可以指定哪些 HTTP 标头包含在源请求中。

  • 所有查看器标头以及下列 CloudFront 标头 – 查看器请求中的所有 HTTP 标头都包含在源请求中。此外,您可以指定要添加到源请求中的 CloudFront 标头。有关 CloudFront 标头的更多信息,请参阅添加 CloudFront HTTP 标头

在使用 Include the following headers(包含以下标头)或 All viewer headers and the following CloudFront headers(所有查看器标头以及下列 CloudFront 标头)设置时,可以按 HTTP 标头的名称(而不是值)指定它们。例如,请考虑以下 HTTP 标头:

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

在此情况下,您可以将标头指定为 Accept-Language,而不是指定为 Accept-Language: en-US,en;q=0.5。但是,CloudFront 会将完整标头(包括其值)包含在源请求中。

Cookies

CloudFront 包含在源请求中的查看器请求中的 Cookie。对于 Cookie,您可以选择下列设置之一:

  • – 查看器请求中的 Cookie 会包含在源请求中。

  • 全部 – 查看器请求中的所有 Cookie 都包含在源请求中。

  • Include specified cookies(包含指定 Cookie)– 您可以指定查看器请求中的哪些 Cookie 包含在源请求中。

在使用 Include specified cookies(包含指定 Cookie)设置时,可以按 Cookie 的名称(而不是值)指定它们。例如,请考虑以下 Cookie 标头:

Cookie: session_ID=abcd1234

在此情况下,您可以将 Cookie 指定为 session_ID,而不是指定为 session_ID=abcd1234。但是,CloudFront 会将完整 Cookie(包括其值)包含在源请求中。

查询字符串

CloudFront 包含在源请求中的查看器请求中的 URL 查询字符串。对于查询字符串,可以选择下列设置之一:

  • – 查看器请求中的查询字符串 会包含在源请求中。

  • 全部 – 查看器请求中的所有查询字符串都包含在源请求中。

  • Include specified query strings(包含指定查询字符串)– 您可以指定查看器请求中的哪些查询字符串包含在源请求中。

在使用 Include specified query strings(包含指定查询字符串)设置时,可以按查询字符串的名称(而不是值)指定它们。例如,请考虑以下 URL 路径:

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

在此情况下,您可以将查询字符串指定为 split-pages,而不是指定为 split-pages=false。但是,CloudFront 会将完整的查询字符串,(包括其值)包含在源请求中。