Amazon S3重定向和Cloudfront


71

我正在尝试使用对象在S3上设置301重定向,在此引用http://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html。我遇到了一些问题,似乎无法弄清楚我在做什么错。

我得到的是空白页(0字节文件),好像未设置“网站重定向位置”元数据值。

我究竟做错了什么?

此外,这在AWS CloudFront上是否有效?


我的S3控制台设置 S3控制台设置

需要注意的几件事:

我具有用于托管静态网站的此设置。我使用的是ssl / https,并且上传了自己的证书,并在cloudfront发行版中进行了设置。除重定向对象外,所有页面似乎都可以使用。我尝试设置路由规则,但是它们似乎在Cloudfront中不起作用。

我正在尝试通过cloudfront url和s3 url(https://s3.amazonaws.com/ {bucket} / users / sign_in)访问重定向

Answers:


146

对于S3中类似网站的功能,例如重定向,html错误消息和索引文档,您不能使用REST端点(${bucket_name}.s3.amazonaws.com${bucket_name}.s3.${region}.amazonaws.com),因为这些功能仅由网站端点(${bucket_name}.s3-website.${region}.amazonaws.com)提供。

http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html

为了使行为在Cloudfront中可用,您还需要将Cloudfront配置为使用此端点,而不是通过控制台中通过自动完成功能提供的REST。

输入您的存储桶的Amazon S3静态网站托管终端节点。该值显示在Amazon S3控制台中“静态网站托管”下“属性”页面上。

当您以这种格式指定存储桶名称时,您可以使用Amazon S3重定向和Amazon S3自定义错误文档。

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html

请注意,Web端点不支持HTTPS,但是您可以将Cloudfront配置为使用HTTP从存储桶中获取,即使客户端连接是HTTPS。


有用的提示:在使用CloudFront进行故障排除和测试更改时,用户通常会对更改时间和CloudFront开始表现出新行为之间的明显“等待时间”感到困惑。对于错误页面,CloudFront具有默认的5分钟 错误缓存最小TTL ,以防止其将对失败页面的请求重新发送到源,这是与“缓存行为”中设置的最小/默认/最大TTL分开的计时器。 。尤其是在测试时,您可能想要禁用这些计时器,并使用我在有关表观Amazon CloudFront Latency的问题的答案中提供的步骤,对返回错误的页面的每个后续请求强制重试。


4
您是否为原始协议策略配置了匹配查看器?s3网站终结点不支持https。您将需要将其设置为http。 docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/...
imperalix

3
谢谢!经过数天的尝试弄清楚为什么我不能使它正常工作,我终于在这里找到了正确的问题和答案:)
maxigs

1
这件事使我久违了。S3OriginConfig设置Origins并使用时,请确保不要包含参数CustomOriginConfig。似乎很明显,但是让我

1
需要注意的另一件事是,如果您使用CloudFront OAI(原始访问身份)来限制对S3存储桶的直接访问,它将不再起作用。一种替代方法(尽管可以绕开它)是创建并转发自定义标头,并使用存储桶策略对其进行检查。例如abridge2devnull.com/posts/2018/01/…–
KJH

1
@KJH是的,OAI不起作用,因为该网站托管功能仅是真正用于公开读取内容的。调整S3允许由策略评估的几个标头之一是当内容仅需要足够“安全”以使诚实的人无法进入时有用的事情之一。我曾考虑过创建Lambda @ Edge库来模拟Web终结点功能,因此可以避免所有这些情况,但是还没有找到足够充分的理由。
Michael-sqlbot,

9

我在重定向失败和下载零长度文件时遇到了相同的问题,但是没有使用Cloudfront。

就我而言,根本原因是我的DNS CNAME记录指向REST端点(static.righto.com.s3-us-west-2.amazonaws.com),而不是网站端点(static.righto.com.s3-网站) -us-west-2.amazonaws.com)。更新CNAME记录可修复我的重定向。

此问题的另一个症状是缺少显示XML错误页面而不是HTML错误页面的页面。

本文档说明了网站端点和REST端点之间的区别。


1

如果您不使用CloudFront来这里寻找解决方案,那么这里是:

您可以使用s3cmd(当然是在bash脚本中)及其参数:

  • --add-headerx-amz-website-redirect-location

例如,此脚本解决了page的问题/about/

s3cmd \
--acl-public \
--add-header "x-amz-website-redirect-location: /about/" \
--no-preserve \
put "./path/to/any/small/file/at/your/local/drive/index.html" "s3://domain.com/about"

该脚本使用文件名复制一些现有文件,且不带斜杠。文件包含什么并不重要,因为浏览器将立即重定向。

当您(以及更重要的网络抓取工具)尝试打开页面时,/about您将301重定向到/about/。这样可以将正确的页面保留Google,Yandex和其他搜索引擎的缓存中。

您可以将此代码重复几个页面。或者,您可以添加搜索文件夹的功能并为每个文件夹拨打电话。也许您会很乐于在这里显示它:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.