增加直接从缓存中处理的请求比例( CloudFront 缓存命中率) - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

增加直接从缓存中处理的请求比例( CloudFront 缓存命中率)

您可以通过增加直接从 CloudFront 缓存中处理的查看者请求的比例来提高性能,而不是前往原始服务器获取内容。这称为提高缓存命中率。

以下部分说明了如何提高缓存命中率。

指定 CloudFront 缓存对象的时间长度

要提升缓存命中率,您可以配置源来将 Cache-Control max-age 指令添加到您的对象,并为 max-age 指定在实践中可行的最长值。缓存持续时间越短,向您的源 CloudFront 服务器发送请求以确定对象是否已更改并获取最新版本的频率就越高。您可以用 stale-while-revalidatestale-if-error 指令来补充 max-age,以进一步提高某些条件下的缓存命中率。有关更多信息,请参阅管理内容保留在缓存中的时间长度(过期)

使用 Origin Shield

CloudFront Origin Shield 可以帮助提高 CloudFront 发行版的缓存命中率,因为它在源站前面提供了额外的缓存层。当你使用 Origin Shield 时,从所有缓存层到你的源站的所有请求都来自一个位置。 CloudFront CloudFront 可以使用 Origin Shield 的单个源请求检索每个对象,缓存的所有其他层(边缘位置和区域边缘 CloudFront缓存)都可以从 Orig in Shield 中检索对象。

有关更多信息,请参阅使用亚马逊 O CloudFront rigin Shield

根据查询字符串参数进行缓存

如果您配置 CloudFront 为基于查询字符串参数进行缓存,则可以通过执行以下操作来改善缓存:

  • 配置 CloudFront 为仅转发您的源将返回唯一对象的查询字符串参数。

  • 为相同参数的所有实例使用相同的大小写。例如,如果一个请求包含,另一个请求包含parameter1=a,则当 CloudFront 请求包含parameter1=A和请求包含parameter1=A时,会将单独的请求转发到您的源。parameter1=a CloudFront 然后分别缓存由您的来源返回的相应对象,即使这些对象是相同的。如果您只使用Aa,则向您的源 CloudFront 服务器转发的请求会更少。

  • 按相同的顺序列出参数。与大小写不同的情况相似,如果对象的一个请求包含查询字符串 parameter1=a&parameter2=b,而相同对象的另一个请求包含 parameter2=b&parameter1=a,则 CloudFront 将两个请求转发到源,并分别缓存相应的对象,即使它们完全相同。如果您始终为参数使用相同的顺序, CloudFront 将较少的请求转发到源。

有关更多信息,请参阅根据查询字符串参数缓存内容。如果您想查看 CloudFront 转发到您的来源的查询字符串,请查看 CloudFront 日志文件cs-uri-query列中的值。有关更多信息,请参阅配置和使用标准日志(访问日志)

根据 Cookie 值进行缓存

如果您配置 CloudFront 为基于 Cookie 值进行缓存,则可以通过执行以下操作来改善缓存:

  • 配置为仅 CloudFront 转发指定的 Cookie,而不是转发所有 Cookie。对于您配置为转发 CloudFront 到您的来源的 Cookie,会 CloudFront 转发 Cookie 名称和值的每个组合。然后,它单独缓存由源返回的对象,即使这些对象全都相同。

    例如,假设查看者在每个请求中都包含两个 Cookie,每个 Cookie 有三个可能的值,并且 Cookie 值的所有组合都是可能的。 CloudFront 针对每个对象,最多将六个不同的请求转发到您的源。如果您的源服务器仅基于其中一个 Cookie 返回对象的不同版本, CloudFront 则向您的源转发的请求超出了必要的范围,并且不必要地缓存了该对象的多个相同版本。

  • 为静态和动态内容创建单独的缓存行为,将 CloudFront 配置成仅为动态内容将 Cookie 转发到源。

    例如,假设您的分发只有一种缓存行为,并且您同时将该发行版用于动态内容(例如.js文件)和很少更改的.css文件。 CloudFront 根据 Cookie 值缓存.css文件的不同版本,因此每个 CloudFront 边缘站点都会将每个新的 Cookie 值或 Cookie 值组合的请求转发到您的源。

    如果您创建的缓存行为具有路径模式*.css且 CloudFront 不基于 Cookie 值进行缓存,则仅针对.css边缘站点收到的第一个给定.css文件请求以及文件过期后的第一个请求将文件请求 CloudFront 转发到您的源。.css

  • 如果可能,请在 Cookie 值对于每个用户唯一(例如用户 ID)时为动态内容创建单独的缓存行为,并为基于少量唯一值变化的动态内容创建单独的缓存行为。

有关更多信息,请参阅根据 Cookie 缓存内容。如果您想查看 CloudFront 转发到您的来源的 Cookie,请查看 CloudFront 日志文件cs(Cookie)列中的值。有关更多信息,请参阅配置和使用标准日志(访问日志)

根据请求标头进行缓存

如果您配置 CloudFront 为基于请求标头进行缓存,则可以通过执行以下操作来改善缓存:

  • 配置 CloudFront 为仅基于指定的标头进行转发和缓存,而不是基于所有标头进行转发和缓存。对于您指定的标头, CloudFront 将转发每个标头名称和值组合。然后,它单独缓存由源返回的对象,即使这些对象全都相同。

    注意

    CloudFront 始终将以下主题中指定的标题转发给您的来源:

    当您配置 CloudFront 为基于请求标头进行缓存时,您不会更改 CloudFront 转发的标头,只更改是否基于标头值 CloudFront 缓存对象。

  • 尝试避免基于具有大量唯一值的请求标头进行缓存。

    例如,如果您想根据用户的设备提供不同大小的图像,则不要配置为基于标题 CloudFront 进行缓存,User-Agent标题具有大量可能的值。相反, CloudFront 请配置为基于 CloudFront 设备类型标头CloudFront-Is-Desktop-ViewerCloudFront-Is-Mobile-ViewerCloudFront-Is-SmartTV-Viewer、和进行缓存。CloudFront-Is-Tablet-Viewer此外,如果您为平板电脑和桌面返回相同版本的图像,则仅转发 CloudFront-Is-Tablet-Viewer 标头,而不是 CloudFront-Is-Desktop-Viewer 标头。

有关更多信息,请参阅根据请求标头缓存内容

不需要压缩时删除 Accept-Encoding 标头

如果未启用压缩(因为源不支持、 CloudFront 不支持压缩,或者内容不可压缩),则可以通过将分配中的缓存行为与设置如下内容的源关联来提高缓存命中率:Custom Origin Header

  • 标头名称Accept-Encoding

  • Header value (标头值):(保留为空)

使用此配置时, CloudFront 会从缓存密钥中删除Accept-Encoding标头,并且不在原始请求中包含标头。此配置适用于来自该 CloudFront 来源的发行版的所有内容。

使用 HTTP 提供媒体内容

有关优化点播视频 (VOD) 和流式传输视频内容的信息,请参阅视频点播和直播视频 CloudFront