Cloudfront 不会从 S3 源设置过期 Header

Cloudfront Won't Set Expiration Header from S3 Origin

我正在使用 S3 存储桶存储大型网站的一堆产品图片。这些图像通过以 S3 存储桶为源的 Cloudfront 提供。我注意到 Cloudfront 不会在图像上设置过期 header,即使我已经设置了分发行为以自定义缓存 headers 并在 Cloudfront 中设置了很长的最小值、最大值和默认 TTL。

我知道我可以在 S3 上设置过期时间 object,但是这将是非常不切实际的,因为我有数百万张图片。我希望 cloudfront 能有幸为我添加这个 header,但事实并非如此。

所以我的问题是让这个过期 header 在每个 S3 object 应用它的唯一方法,或者我可能在 Cloudfront 中遗漏了一些可以为我做的东西?

CloudFront 的 TTL 配置仅控制 CloudFront 在缓存中保留 object 的时间。

它不添加任何 headers。

所以,是的,您需要在 S3 中的 object 上设置这些。

请注意 Cache-Control: 通常被认为是比 Expires: 更好的选择。


另一种避免更新项目的方法是在 EC2 中与存储桶在同一区域配置代理服务器,并让服务器在响应通过它时添加 headers。

Request:  CloudFront >> Proxy >> S3
Response: S3 >> Proxy >> CloudFront

...物有所值。