我在 S3 存储桶前面有一个 CloudFront 发行版。CloudFront URL 受到限制,并且密钥必须经过 URL 签名。S3 存储桶也受到限制,只允许 CloudFront 读取
有时,在我成功将图像上传到我的 s3 后,当我随后尝试检索图像时,cloudfront 返回 403。这种情况持续约一分钟,之后 cloudfront 开始正确提供图像。
即使图像成功上传后也会发生这种情况,我可以通过前往 s3 控制台手动查看它。
答案1
某些原因导致您的文件在存储桶中出现之前就被 CloudFront 请求。CloudFront 的默认配置会导致这种情况被负面缓存长达 5 分钟。
默认情况下,当您的源返回 HTTP 4xx 或 5xx 状态代码时,CloudFront 会缓存这些错误响应五分钟,然后向源提交该对象的下一个请求,以查看导致错误的问题是否已解决以及请求的对象现在是否可用。
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html
如果浏览器或其他任何东西在将文件上传到 S3 完成之前尝试从该特定的 CloudFront 边缘(或任何边缘,如果请求恰好也经过区域边缘 - CloudFront 现在有两个边缘层)下载文件,则 S3 将返回错误,并且 CloudFront - 在该边缘位置 - 将缓存该错误并记住在接下来的 5 分钟内不要再尝试。
该计时器是可配置的。
您可以指定错误缓存持续时间——错误缓存最小 TTL— 对于 CloudFront 缓存的每个 4xx 和 5xx 状态代码。有关过程,请参阅配置错误响应行为。
— http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html
对于任何错误代码(如 403),将值设置为 0,以禁用错误缓存。
本回答内容改编自我在堆栈溢出。