4

我是 AWS CloudFront 的新手。我有一个简单的问题,我似乎无法弄清楚。

我有一个动态站点,它实际上只是一个允许编辑输入文章的 CMS。后来,CMS 生成静态 html 文件(我们在 drupal 6 下使用 boost 模块)。

所以我想不通的是如何为html文件设置缓存头来实现这个结果:

我希望 cloudfront 将 html 文件保留至少一个小时,但它必须确保该文件未被修改。如果文件被修改,它必须在 5 分钟内得到它。

我说得有道理吗?

我想出的是:

<FilesMatch "\.((html)|((html)\.gz))$">
        ExpiresByType text/html A300
        Header append Cache-Control "must-revalidate"        
  </FilesMatch>

如果没有进行任何更改,它会在 5 分钟后保留文件吗?

我在测试自己时遇到了麻烦,因为我在不同的浏览器中得到了不同的结果。

4

1 回答 1

2

首先要了解的是 CloudFront 是一个缓存。缓存不会检查文件是否已更改。他们将简单地继续提供缓存的任何内容,直到该缓存过期。

您似乎在发布代码,告诉您的 Apache Web 服务器如何提供文件,但这与 Amazon CloudFront 完全无关。CloudFront(本身就是一个缓存)有自己的缓存设置,并且不遵循 Apache 的设置。

缓存数据的默认持续时间为 24 小时。您可以将 CloudFront 配置为缓存短至 1 小时(或者现在可能 1 分钟......我不记得临时的)。如果您需要缓存提前过期,您可以通过 AWS 控制台或 Web 服务 API 请求“失效”(您没有指定与 CloudFront 交互的方式)。

如果您希望缓存失效,那么需要让您的 Drupal 模块在 CloudFront 生成新的 HTML 时向它发送一个失效请求。CloudFront 不会自行检查(同样,因为缓存不会这样做)。

根据个人经验,CloudFront 通常需要 3 到 15 分钟来清除它在世界各地运行的所有缓存服务器,以便它可以提取您的新内容。

这有意义吗?

于 2012-10-05T08:16:45.900 回答