我建立了一个拥有产品模板的系统。品牌将覆盖模板以创建产品。可以将图像上传到模板并在产品上覆盖。产品图片将上传到相应品牌的S3存储桶。但是在产品模板上,图像会上传到通用S3存储桶。
如果该品牌的存储桶收到带有文件URL的404或403,是否可以使该存储桶回退到通用存储桶。类似于托管网站的重定向规则?这些只是带有图片的存储桶,因此它不是托管网站,我希望避免将其打开。
答案 0 :(得分:1)
没有办法单独使用S3来执行此操作,但是可以通过CloudFront结合两个S3存储桶来完成,这两个S3存储桶在原始组中配置了适当的原始故障转移设置,因此从第一个发生403/404错误桶导致CloudFront从第二个桶发出后续请求。
在为缓存行为配置原始故障转移之后,CloudFront对查看器请求执行以下操作:
出现缓存命中时,CloudFront返回请求的文件。
当缓存未命中时,CloudFront会将请求路由到您在来源组中标识的主要来源。
当返回未配置用于故障转移的状态代码(例如HTTP 2xx或HTTP 3xx状态代码)时,CloudFront将提供请求的内容。
当主要来源返回您为故障转移配置的HTTP状态代码时,或在超时后,CloudFront会将请求路由到来源组中的备份来源。
这似乎是您要描述的理想行为。当然,这意味着需要回到第二个存储桶的缓存未命中将需要额外的时间来服务,但是对于缓存命中,由于CloudFront仅经历了“先尝试然后再尝试”,因此不会有任何延迟。另一个”在缓存未命中。这也意味着您将为不存在的对象在主存储桶上支付一些流量,因此,如果主存储桶会更多地包含该对象,这是最有意义的。
此解决方案不会重定向浏览器-CloudFront在返回响应之前会遵循第二条路径-因此,您需要注意在上载后备对象时附加的Cache-Control
设置,因为在任何缓存对象到期之前,将不可见的备用对象已经被获取并缓存(通过CloudFront或浏览器)之后添加了一个(以前不存在的)主对象。