本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
增加直接从缓存中处理的请求比例( CloudFront 缓存命中率)
您可以通过增加直接从 CloudFront 缓存中处理的查看者请求的比例来提高性能,而不是前往原始服务器获取内容。这称为提高缓存命中率。
以下部分说明了如何提高缓存命中率。
主题
指定 CloudFront 缓存对象的时间长度
要提升缓存命中率,您可以配置源来将 Cache-Control max-agemax-age
指定在实践中可行的最长值。缓存持续时间越短,向您的源 CloudFront 服务器发送请求以确定对象是否已更改并获取最新版本的频率就越高。您可以用 stale-while-revalidate
和 stale-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 然后分别缓存由您的来源返回的相应对象,即使这些对象是相同的。如果您只使用A
或a
,则向您的源 CloudFront 服务器转发的请求会更少。 -
按相同的顺序列出参数。与大小写不同的情况相似,如果对象的一个请求包含查询字符串
parameter1=a¶meter2=b
,而相同对象的另一个请求包含parameter2=b¶meter1=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 处理请求并将其转发到您的 Amazon S3 源服务器 > CloudFront 删除或更新的 HTTP 请求标头
-
如何 CloudFront 处理请求并将其转发到您的自定义源服务器 > HTTP 请求标头和 CloudFront 行为(自定义来源和 Amazon S3 来源)
当您配置 CloudFront 为基于请求标头进行缓存时,您不会更改 CloudFront 转发的标头,只更改是否基于标头值 CloudFront 缓存对象。
-
-
尝试避免基于具有大量唯一值的请求标头进行缓存。
例如,如果您想根据用户的设备提供不同大小的图像,则不要配置为基于标题 CloudFront 进行缓存,
User-Agent
标题具有大量可能的值。相反, CloudFront 请配置为基于 CloudFront 设备类型标头CloudFront-Is-Desktop-Viewer
CloudFront-Is-Mobile-Viewer
CloudFront-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。