缓存行为设置 - Amazon CloudFront

缓存行为设置

通过设置缓存行为,您可以为您网站上文件的特定 URL 路径模式配置各种 CloudFront 功能。例如,一个缓存行为可能适用于您用作 CloudFront 源服务器的 Web 服务器上 images 目录中所有的 .jpg 文件。您可为每个缓存行为配置的功能包括:

  • 路径模式

  • 如果您已经为 CloudFront 分配配置了多个源,则为您希望 CloudFront 将您的请求转发到的源

  • 是否将查询字符串转发到源

  • 访问指定文件是否需要签名的 URL

  • 是否要求用户使用 HTTPS 访问这些文件

  • 这些文件保留在 CloudFront 缓存中的最短时间,不管您的源添加到文件中的任何 Cache-Control 标头的值

当您创建新分配时,您为默认缓存行为指定设置,这将自动把所有请求转发到您创建分配时指定的源中。在创建分配后,您可创建其他缓存行为,该行为定义 CloudFront 在其接受与路径模式相匹配的对象请求时如何响应,例如 *.jpg。如果您创建其他缓存行为,默认缓存行为始终是最后一个被处理的。其他缓存行为以他们在 CloudFront 控制台中所列的顺序进行处理,或者,如果您使用 CloudFront API,以他们在分配 DistributionConfig 元素中所列的顺序进行处理。有关更多信息,请参阅 路径模式

当您创建缓存行为是,可指定您希望 CloudFront 从中获取对象的一个源。因此,如果您希望 CloudFront 分配所有源的对象,必须至少具有与您所拥有的源一样多的缓存行为(包括默认缓存行为)。例如,如果您有两个源但只有一个默认缓存行为,则默认缓存行为将导致 CloudFront 从其中一个源获取对象,但永远不会使用另一个源。

有关您可以添加到分配的当前最大缓存行为数,或要请求提高配额(以前称为限制),请参阅分配的一般配额

路径模式

路径模式(例如,images/*.jpg)指定您希望该缓存行为所适用的请求。CloudFront 收到查看器请求时,会按照缓存行为在分配中列出的顺序,将请求路径与路径模式进行比较。第一个匹配者决定了哪个缓存行为适用于该请求。例如,假设您具有以下三个路径模式的三个缓存行为,顺序如下:

  • images/*.jpg

  • images/*

  • *.gif

注意

可以选择在路径模式的开头包含斜杠 (/),例如 /images/*.jpg。无论开头是否有 /,CloudFront 行为都相同。如果您未在路径的开头指定 /,则会自动隐含此字符;无论开头是否有 /,CloudFront 都会以相同方式处理该路径。例如,CloudFront 将 /*product.jpg 视为与 *product.jpg 相同

文件 images/sample.gif 的请求不符合第一个路径模式,因此,相关的缓存行为不适用于该请求。文件符合第二路径模式,因此,与第二个路径模式有关的缓存行为适用,即使该请求与第三个路径模式也匹配。

注意

在创建新的分配时,默认缓存行为的路径模式的值将设置为 *(所有文件)且无法更改。此值导致 CloudFront 将您对象的所有请求转发到您在 源域 字段中指定的源。如果对象的请求与任何其他缓存行为的路径模式都不匹配,CloudFront 将应用您在默认缓存行为中指定的行为。

重要

请谨慎定义路径模式及其顺序,否则您可能会向用户提供非预期的内容访问权限。例如,假设请求匹配两个缓存行为的路径模式。第一个缓存行为不要求签名 URL,而第二个缓存行为要求签名 URL。用户无需使用签名 URL 即可访问对象,因为 CloudFront 处理与第一个匹配有关的缓存行为。

如果您正在使用 MediaPackage 通道,则必须为您为源的端点类型定义的缓存行为包含特定的路径模式。例如,对于 DASH 端点,为路径模式键入 *.mpd。有关更多信息和具体说明,请参阅提供使用 AWS Elemental MediaPackage 格式化的实时视频

您指定的路径适用于指定目录以及该指定目录下所有子目录中所有文件的请求。在评估路径模式时,CloudFront 不会考虑查询字符串或 Cookie。例如,如果 images 目录包含 product1product2 子目录,此路径模式 images/*.jpg 适用于 imagesimages/product1images/product2 目录中任何 .jpg 文件的请求。如果您希望将不同的缓存行为应用于 images/product1 目录中的文件而非 imagesimages/product2 目录中文件,为 images/product1 创建单独的缓存行为,并将该缓存行为移到 images 目录中缓存行为上方 (前面) 的位置。

您可在路径模式中使用以下通配符:

  • * 匹配 0 或多个字符。

  • ? 精准匹配 1 个字符。

以下示例展示了通配符如何工作:

路径模式 与路径模式匹配的文件

*.jpg

所有 .jpg 文件。

images/*.jpg

images 目录及该 images 目录下子目录中的所有 .jpg 文件。

a*.jpg

  • 文件名以 a 开头的所有 .jpg 文件,例如,apple.jpgappalachian_trail_2012_05_21.jpg

  • 文件路径以 a 开头的所有 .jpg 文件,例如,abra/cadabra/magic.jpg

a??.jpg

文件名以 a 开头且随后紧跟两个其他字符的所有 .jpg 文件,例如,ant.jpgabe.jpg

*.doc*

文件扩展名以 .doc 开头的所有文件,例如,.doc.docx.docm 文件。在这种情况下,您不能使用路径模式 *.doc?,因为该路径模式不适用于 .doc 文件的请求;? 通配符精确替换一个字符。

路径模式的长度上限是 255 个字符。该值可包含以下任何字符:

  • A-Z, a-z

    路径模式区分大小写,因此,路径模式 *.jpg 不适用于文件 LOGO.JPG

  • 0-9

  • _ - . * $ / ~ " ' @ : +

  • &,作为 & 传递和返回

路径规范化

CloudFront 对 URI 路径进行了与 RFC 3986 一致的规范化,然后将该路径与正确的缓存行为进行匹配。缓存行为匹配后,CloudFront 会将原始 URI 路径发送到源。如果它们不匹配,则请求会改为与您的默认缓存行为进行匹配。

会对某些字符进行规范化并从路径中删除它们,例如多个斜杠(//)或句点(..)。这可能会更改 CloudFront 用于匹配预期缓存行为的 URL。

例 示例

您可以为缓存行为指定 /a/b*/a* 路径。

  • 发送 /a/b?c=1 路径的查看器将与 /a/b* 缓存行为进行匹配。

  • 发送 /a/b/..?c=1 路径的查看器将与 /a* 缓存行为进行匹配。

要解决规范化路径的问题,您可以更新请求路径或缓存行为的路径模式。

源或源组

此设置仅在您为现有分配创建或更新缓存行为时才适用。

输入现有源或源组的值。该值标识当请求(如 https://example.com/logo.jpg)与缓存行为(如 *.jpg)或默认缓存行为 (*) 的路径模式匹配时,您希望 CloudFront 将请求路由至的源或源组。

查看器协议策略

选择您希望查看器用来访问 CloudFront 边缘站点中的内容的协议策略:

  • HTTP 和 HTTPS:查看器可使用两种协议。

  • 将 HTTP 重定向到 HTTPS:查看器可使用两种协议,但 HTTP 请求将自动重定向到 HTTP 请求。

  • 仅 HTTPS:如果查看器使用了 HTTPS,则只能访问您的内容。

有关更多信息,请参阅 要求在查看器和 CloudFront 之间使用 HTTPS 进行通信

允许的 HTTP 方法

指定您希望 CloudFront 处理并转发到源的 HTTP 方法:

  • GET、HEAD:您只能使用 CloudFront 获取您源中的对象或获取对象标头。

  • GET、HEAD、OPTIONS:您只能使用 CloudFront 从源获取对象、获取对象标头或检索您的源服务器支持的选项列表。

  • GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE:您可以使用 CloudFront 获取、添加、更新和删除对象以及获取对象标头。此外,您可以执行其他 POST 操作,例如从 Web 表格提交数据。

    注意

    如果您在工作负载中使用 gRPC,则必须选择 GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE。gRPC 工作负载需要 POST 方法。有关更多信息,请参阅 将 gRPC 与 CloudFront 分配结合使用

    CloudFront 将缓存对 GETHEAD 请求以及(可选)OPTIONS 请求的响应。对 OPTIONS 请求的响应与对 GETHEAD 请求的响应单独缓存(OPTIONS 方法包含在 OPTIONS 请求的缓存键中)。CloudFront 不缓存对使用其他方法的请求的响应。

重要

如果您选择 GET, HEAD, OPTIONSGET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE,则可能需要限制对 Amazon S3 存储桶或自定义源的访问,以阻止用户执行您不希望他们执行的操作。以下示例说明了如何限制访问:

  • 如果将 Amazon S3 作为您的分配的源:创建 CloudFront 源访问控制,以限制对您的 Amazon S3 内容的访问,并为源访问控制授予权限。例如,如果您只是 因为想要使用 PUT 而将 CloudFront 配置为接受并转发这些方法,则仍必须配置 Amazon S3 存储桶策略以适当处理 DELETE 请求。有关更多信息,请参阅 限制对 Amazon S3 源的访问

  • 如果您使用自定义源:配置源服务器以处理所有方法。例如,您将 CloudFront 配置为接受并转发这些方法只是因为您想要使用 POST,则仍必须配置您的源服务器以适当处理 DELETE 请求。

字段级加密 Config

如果您要对特定数据字段强制实施字段级加密,请在下拉列表中选择一个字段级加密配置。

有关更多信息,请参阅 使用字段级加密帮助保护敏感数据

缓存的 HTTP 方法

指定您是否希望 CloudFront 在查看器提交 OPTIONS 请求时缓存来自源的响应。CloudFront 始终缓存对 GETHEAD 请求的响应。

允许通过 HTTP/2 发出 gRPC 请求

指定是否希望您的分配允许 gRPC 请求。要启用 gRPC,请选择以下设置:

  • 对于允许的 HTTP 方法,请选择 GET、HEAD、OPTIONS、PUT、POST、PATCH、DELETE 方法。gRPC 需要 POST 方法。

  • 选择 POST 方法后,选中出现的 gRPC 复选框。

  • 对于 支持的 HTTP 版本,请选择 HTTP/2

有关更多信息,请参阅 将 gRPC 与 CloudFront 分配结合使用

基于选择的请求标头进行缓存

指定您是否要 CloudFront 基于指定标头的值缓存对象:

  • 无(改进缓存) – CloudFront 不根据标头值缓存您的对象。

  • 允许列表 – CloudFront 仅根据指定标头的值缓存您的对象。使用允许列表标头选择您希望 CloudFront 进行缓存时所基于的标头。

  • 所有 – CloudFront 不缓存与该缓存行为关联的对象。相反,CloudFront 会将每个请求发送到源。(不建议用于 Amazon S3 源。)

无论您选择哪个选项,CloudFront 都会将特定标头转发到您的源并根据您转发的标头执行特定操作。有关 CloudFront 如何处理标头转发的更多信息,请参阅HTTP 请求标头和 CloudFront 行为(自定义源和 Amazon S3 源)

有关如何使用请求标头在 CloudFront 中配置缓存的更多信息,请参阅根据请求标头缓存内容

允许列表标头

此设置仅在您为基于选择的请求标头进行缓存选择允许列表时才适用。

指定您希望 CloudFront 在缓存对象时考虑的标头。从可用标头列表中选择标头,然后选择添加。要转发自定义标头,请在字段中输入标头的名称,然后选择添加自定义标头

有关您可以为每个缓存行为列入允许列表的当前最大标头数,或者要请求提高配额(以前称为限制),请参阅标头的配额

对象缓存

如果源服务器将 Cache-Control 标头添加到对象以控制在 CloudFront 缓存中保留对象的时间长度,并且您不希望更改 Cache-Control 值,请选择使用源缓存标头

要指定在 CloudFront 缓存中保留对象的最短时间和最长时间(不管 Cache-Control 标头如何)以及在缺少 Cache-Control 标头时在 CloudFront 缓存中保留对象的默认时间,请选择自定义。然后,在最小 TTL默认 TTL最大 TTL 字段中指定值。

有关更多信息,请参阅 管理内容保留在缓存中的时间长度(过期)

最小 TTL

指定您希望对象在 CloudFront 缓存中保留的最短时间(以秒为单位),在此时间之后,CloudFront 会向源发送另一个请求以确定此对象是否已更新。

有关更多信息,请参阅 管理内容保留在缓存中的时间长度(过期)

最大 TTL

指定您希望在 CloudFront 查询您的源以了解对象是否已更新之前,对象保留在 CloudFront 缓存中的最大时长(以秒为单位)。您为最大 TTL 指定的值仅在源向对象添加 HTTP 标头 (例如 Cache-Control max-ageCache-Control s-maxageExpires) 时适用。有关更多信息,请参阅 管理内容保留在缓存中的时间长度(过期)

要指定 Maximum TTL 的值,您必须为 Object Caching 设置选择 Customize 选项。

最大 TTL 的默认值为 31536000 秒(一年)。如果您将最小 TTL默认 TTL 的值更改为一个大于 31536000 秒的值,则最大 TTL 的默认值将变为默认 TTL 的值。

默认 TTL

指定您希望对象在 CloudFront 缓存中保留的默认时间(以秒为单位),在此时间之后,CloudFront 会向您的源转发另一个请求以确定此对象是否已更新。您为默认 TTL 指定的值仅在源不向对象添加 HTTP 标头(例如 Cache-Control max-ageCache-Control s-maxageExpires)时才适用。有关更多信息,请参阅 管理内容保留在缓存中的时间长度(过期)

要指定默认 TTL 的值,您必须为对象缓存设置选择自定义选项。

默认 TTL 的默认值为 86400 秒(一天)。如果您将最小 TTL 的值更改为一个大于 86400 秒的值,则默认 TTL 的默认值将更改为最小 TTL 的值。

转发 Cookie

注意

对于 Amazon S3 源,此选项仅适用于配置为网站端点的存储桶。

指定是否希望 CloudFront 转发 Cookie 到您的源服务器,以及指定转发哪些 Cookie。如果您选择仅转发选定的 Cookie(Cookie 允许列表),请在允许列表 Cookie 字段中输入 Cookie 名称。如果选择全部,不管您的应用程序使用多少,CloudFront 都会转发所有 Cookie。

Amazon S3 不处理 Cookie,且将 Cookie 转发到来源会降低缓存能力。对于将请求转发到 Amazon S3 源的缓存行为,请对转发 Cookie 选择

有关转发 cookie 到源的更多信息,请转至 根据 Cookie 缓存内容

允许列表 Cookie

注意

对于 Amazon S3 源,此选项仅适用于配置为网站端点的存储桶。

如果您在转发 Cookie 列表中选择允许列表,请在允许列表 Cookie 字段中输入您希望 CloudFront 为该缓存行为转发到原始服务器的 Cookie 的名称。在新一行中输入每个 Cookie 的名称。

可以使用以下通配符来指定 Cookie 名称:

  • * 匹配 Cookie 名称中的 0 个或多个字符

  • ? 与 Cookie 名称中的 1 个字符完全匹配

例如,假设对象的查看器请求包含一个带以下名称的 Cookie:

userid_member-number

其中,您的每个用户均具有一个唯一的 member-number 值。您希望 CloudFront 为每个成员缓存对象的单独版本。您可以通过将所有 Cookie 转发到源来完成该操作,但查看器请求包含一些您希望 CloudFront 不要缓存的 Cookie。或者,您也可以指定以下值以作为 Cookie 名称,这会导致 CloudFront 将所有以 userid_ 开头的 Cookie 转发到源:

userid_*

有关您可以为每个缓存行为列入允许列表的当前最大 cookie 名称数,或者要请求提高配额(以前称为限制),请参阅Cookies 的配额(旧缓存设置)

查询字符串转发和缓存

CloudFront 可根据查询字符串参数的值来缓存不同版本的内容。请选择以下任一选项:

无(改进缓存)

如果无论查询字符串参数的值如何,源都返回相同版本的对象,请选择该选项。这增加了 CloudFront 可从缓存满足请求的可能性,这提高了性能并降低了源的负载。

全部转发,基于允许列表进行缓存

如果源服务器根据一个或多个查询字符串参数返回不同版本的对象,请选择该选项。然后,在 查询字符串允许列表 字段中指定您希望 CloudFront 作为缓存基础的参数。

全部转发,基于所有进行缓存

如果源服务器为所有查询字符串参数返回不同版本的对象,请选择该选项。

有关基于查询字符串参数进行缓存的更多信息(包括如何改进性能),请参阅根据查询字符串参数缓存内容

查询字符串允许列表

此设置仅在您为 查询字符串转发和缓存 选择全部转发,基于允许列表进行缓存时才适用。您可以指定您希望 CloudFront 用作缓存基础的查询字符串参数。

Smooth Streaming

如果您希望以 Microsoft Smooth Streaming 格式分发媒体文件并且您没有 IIS 服务器,则选择

如果您有 Microsoft IIS 服务器并且要将其用作以 Microsoft Smooth Streaming 格式分发媒体文件的源,或者您不打算分发 Smooth Streaming 媒体文件,则选择

注意

如果您指定,您仍可以使用该缓存行为分配其他内容,只要该内容与路径模式值匹配。

有关更多信息,请参阅 为 Microsoft Smooth Streaming 配置点播视频

限制查看器访问(使用签名 URL 或签名 Cookie)

如果您希望与该缓存行为的 PathPattern 匹配的对象请求使用公共 URL,请选择 No

如果您希望与该缓存行为的 PathPattern 匹配的对象请求使用签名 URL,请选择 Yes。然后指定您希望用于创建签名 URL 的 AWS 账户;这些账户被称为可信签署人。

有关可信签署人的更多信息,请参阅指定可以创建签名 URL 和签名 Cookie 的签署人

可信签署人

仅在您为限制查看器访问(使用签名的 URL 或签名的 Cookie)选择时才适用。

选择您希望用作此缓存行为的可信签署人的 AWS 账户:

  • 本身:将您当前登录到 AWS Management Console的账户作为可信签署人。如果您目前作为 IAM 用户登录,添加相关的 AWS 账户作为可信签署人。

  • 指定账户:AWS 账号字段中输入可信签署人的账户号码。

要创建可信签署人 URL,AWS 账户必须至少具有一个有效的 CloudFront 密钥对。

重要

如果您更新您已经用于分发内容的分配,则在准备开始产生对象的签名 URL 时只添加可信签署人。在您把可信签署人添加到分配为后,用户必须使用签名 URL 访问与该缓存行为 PathPattern 匹配的对象。

AWS 账户 数字

仅在您为可信签署人选择指定账户时才适用。

除当前账户之外或替代当前账户,如果您想使用 AWS 账户 创建签名 URL,请在该字段每一行输入一个 AWS 账户 号。请注意以下几点:

  • 您指定的账户必须至少具有一个有效的 CloudFront 密钥对。有关更多信息,请参阅 为签署人创建密钥对

  • 您不能为 IAM 用户创建 CloudFront 密钥对,因此,不能使用 IAM 用户作为可信签署人。

  • 有关如何获取账户的 AWS 账户编号的信息,请参阅《AWS 账户管理参考指南》中的查看 AWS 账户标识符

  • 如果您输入当前账户的账户号码,CloudFront 则自动选中本身复选框,并从 AWS 账号列表中删除账号。

自动压缩对象

如果您希望 CloudFront 在查看器支持压缩内容时自动压缩某些类型的文件,请选择。当 CloudFront 压缩内容时,由于文件更小,因此下载速度更快,并会更快地为用户呈现网页。有关更多信息,请参阅 提供压缩文件

CloudFront 事件

此设置适用于 Lambda 函数关联

您可以选择在以下一个或多个 CloudFront 事件发生时,运行 Lambda 函数:

  • 在 CloudFront 收到查看器的请求时(查看器请求)

  • 在 CloudFront 将请求转发到源之前(源请求)

  • 在 CloudFront 收到来自源的响应时(源响应)

  • 在 CloudFront 将响应返回到查看器之前(查看器响应)

有关更多信息,请参阅 选择要触发函数的事件

Lambda 函数 ARN

此设置适用于 Lambda 函数关联

指定要为其添加触发器的 Lambda 函数的 Amazon 资源名称(ARN)。要了解如何获取函数的 ARN,请参阅使用 CloudFront 控制台添加触发器过程的步骤 1。

包含正文

此设置适用于 Lambda 函数关联

有关更多信息,请参阅包括正文