云端 https 请求的 Aws S3 重定向规则问题

Aws S3 redirection rules issue for cloudfront https requests

我们有一个 aws s3 存储桶来托管我们的动态图像,这些图像将由 Web 和移动应用程序通过 https 获取,并且大小不同 (url/width x height/image_name),即 http://test.s3.com/200x300/image.png).

为此我们做了两件事:

1- 实时调整大小:我的 s3 存储桶中有一个重定向规则,用于将请求不存在的图像大小的 404 错误重定向到调用 Lambda 函数的 API 网关。 lambda 函数获取原始图像并调整其大小并将其放置在与请求大小匹配的存储桶中的文件夹中。

我们遵循了本文中的步骤: https://aws.amazon.com/blogs/compute/resize-images-on-the-fly-with-amazon-s3-aws-lambda-and-amazon-api-gateway/

2- HTTPS:我创建了一个带有 SSL 证书的云端分发,其来源是 s3 静态网站端点

问题:使用云端 https 域从 s3 请求图像总是会导致 404 错误,该错误会被我的重定向规则 API 网关重定向,即使此特定图像大小已经存在。

我尝试调试这个问题,但没有成功。我检查了这些请求,据我所知,一切都应该正常进行。

如果能提示如何更好地调试此问题(以及我需要在此处提供哪种日志),我将不胜感激。

谢谢

萨里

此解决方案依赖于 S3 为缺少的 objects 生成 HTTP 重定向,将浏览器重定向到 API 网关以调整 object... 的大小并将其保存在原始位置URL.

问题是two-fold:

  • S3 生成的重定向不包括任何 Cache-Control headers 和
  • 当响应中缺少 Cache-Control 时,CloudFront 的默认行为是在内部缓存响应以获取名为 Default TTL 的计时器的值,该计时器默认设置为 86400 秒(24 小时) .

这导致的问题是 CloudFront 会记住原始重定向并将浏览器一次又一次地发送给它,即使 object 现在存在。

为 "Object caching" 选择 Customize 而不是 Use Origin Cache Headers,然后将 Default TTL 设置为 0(全部在 CloudFront 缓存行为设置中)将解决问题,因为它将 CloudFront 配置为不缓存源不包含任何相关 Cache-Control headers.

的响应

更多背景资料:

What is Cloudfront Minimum TTL for? 解释了 Minimum/Default/Maximum TTL 定时器和 how/when 它们的应用。

Setting "Object Caching" on CloudFront 解释了这些选项令人困惑的 UI 标签,这可能是所有三个计时器都可配置之前的遗留物。