使 Cloudfront 分配的缓存失效时出现问题



我在使 CloudFront 分配的缓存失效时遇到了一些问题。

我将通配符域名映射到我的 CloudFront 分配;然后创建了一个Lamba@Edge,用于修改请求源,将每个子域重定向到其子文件夹。

它以这种方式工作:

aaa.mydomain.com => mydomain.com/aaa
bbb.mydomain.com => mydomain.com/bbb
ccc.mydomain.com => mydomain.com/ccc
...

我无法使缓存失效: 如果我使路径无效/bbb/*它不起作用。相反,路径/*有效,但通过这种方式,我使所有 S3 存储桶无效,我想避免它。

有什么帮助吗?

谢谢!

我相信您当前正在使用源请求 Lambda 函数,并且它不包括缓存键的更改路径,我知道查看器请求将有助于实现它,但不幸的是,您需要编写查看器请求(更改路径)和源请求来选择源。

我遇到了同样的问题。起初,我研究了编写一个Lambda@Edge函数,该函数将检查内容是否应失效,然后通过将查询参数附加到 URL 来中断缓存。但这似乎与使整个 S3 存储桶无效一样有问题(而且成本高昂)。相反,我选择的解决方案是对不应由 CloudFront 缓存的特定资产使用Cache-Control: no-cache标头,然后仅使用查询参数使其他缓存资产失效。而且此方法不需要发出任何 CloudFront 失效

例如,如果我在 CloudFront/S3 上托管一个静态站点,如下所示:

- index.html
- header.jpg
- site.css

我将其上传到S3,如下所示:

- index.html // Cache-Control: no-cache
- header.jpg // Linked with <img src='header.jpg?uniquedigest' />
- site.css // Linked with <link href='site.css?uniquedigest' />

这样,CloudFrontL 中的所有内容都会保持最新状态,只有索引.html不会被缓存,并且在从源 S3 存储桶初始提取后,所有资产仍会缓存。一个缺点是索引.html总是从源头获取的,但 HTML 应该足够小,这样就不会对性能产生很大的影响。

最新更新