带有S3重定向的Amazon Cloudfront


10

我正在尝试做一些相对简单的事情-我想设置一些域和子域以重定向到我们网站的核心域,但是我想将重定向放在Cloudfront上。除重定向根路径外,其他所有操作均有效-这使我得到了一个XML文件,其中部分描述了S3存储桶。

背景

S3

S3允许您设置全重定向存储桶,例如:

具有重定向所有请求的S3设置

通过测试,Web终结点(brass9-com.s3-website-us-west-1.amazonaws.com)会执行应做的工作-将其重定向到brass9.com。好。

云前

Cloudfront允许您指向S3存储桶,但是它建议您这样做的方式是错误的- 您需要使用上面的Web端点,而不是像Brass9-com.s3.amazonaws.com这样指向存储桶。除此之外,您可以将所有内容保留为默认值,并获得良好的重定向行为。因此,像www.brass9.com/portfolio这样的路径会正确地重定向到它应该在的位置。也不错。

问题-根域重定向

然后无法正常工作的一件事是从纯www.brass9.com重定向。与其让您获得重定向,不如让您得到这个奇怪的结果:

<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>brass9-com</Name><Prefix></Prefix>
<Marker></Marker><MaxKeys>1000</MaxKeys><IsTruncated>false</IsTruncated>
</ListBucketResult>

好... 。因此,这并不是完全意外的 -因为没有默认根对象。但是,为防止这种行为,我可能会指定哪个默认根对象?我需要指向的S3重定向对象的名称是什么?还是有其他适当的配置,或者这仅仅是Amazon需要修复的Cloudfront和S3交互方式中的错误?

已知的不起作用的解决方案:默认根对象

可以指定index.html的默认根对象,但是它没有任何帮助-只是改变了问题。相反,Cloudfront URL重定向到主站点上的/index.html,该站点是404(我们不使用index.html文件,它是服务器端框架驱动的站点)。我可以在服务器上放一个index.html,但这首先使使用Cloudfront的速度提高不大。

类似问题

一个问题提出了类似的要求,但由于某种原因而不是我所看到的XML响应,返回了一个空白的0字节响应。它不包含有关该问题或解决方案的问题。

相关文章

一篇文章建议您仅在裸域和www域上为整个网站提供服务。这与任何用户的书签,您的搜索排名等有关。您不应该这样做。

一些人讨论了在S3和Cloudfront上托管静态网站而不是重定向方案,因此没有关系。

那么,如何正确执行此操作?

Cloudfront配置的屏幕快照-无默认根对象,指向S3起源。忽略进行中-我刚刚打开和关闭默认根对象进行测试。

没有默认根对象指向S3的Cloudfront分布

以及该发行版的Origin配置:

原点-指向S3,默认


1
对配置为重定向所有内容(包括根目录)的网站端点的任何请求都可以做到这一点。您在该重定向存储桶上有存储桶策略吗?听起来好像可以,但是不应该。GET /在您更正配置以使用Web终结点之前,听起来还好像您可能一直在从Cloudfront看到缓存的响应。
Michael-sqlbot

1
实际上,即使我多次无效并更改了CF的配置,它仍然在S3中仍然徘徊在缓存的ListBucket响应中。只需一个小时或4个小时即可清除。@ Michael-sqlbot如果您以评论的形式发表评论,我可以将其标记为已接受。
克里斯·莫斯基尼

Answers:


4

如果遇到此问题,请在为Cloudfront配置s3存储桶源时首先检查,自动完成功能将返回s3 REST终结点 domain.amazonaws.com,并返回此ListBucketResult响应。

您必须手动写下网站端点domain.s3-website-region.amazonaws.com

重要提示:如果您使用REST端点错误地配置了Cloudfront,则必须通过Invalidations使缓存无效,否则它将继续返回REST响应


关于缓存失效的注释最终帮助我解决了我已经追逐了几天的问题。谢谢!
Nate

非常感谢!对于Terraform用户,在origin该分配,使用的块aws_s3_bucket.BUCKET.website_endpoint中的domain_name(未bucket_regional_name),并添加custom_origin_config块。
dusan

你是救星!在最后一天,我们一直在努力解决这个问题,即使我们正在更改分发设置,也一直在恢复ListBucketResult XML。最后,在删除发行版并创建一个指向domain.s3-website-region.amazonaws.com的新发行版之后,重定向对我们成功了!
Dale Zak

2

解决方案:按照问题所述设置重定向,然后等待S3和CloudFront缓存时间。它们可能需要4个小时或更长时间,因此您只需要设置所有内容,然后等待并期待最好的。

(这是Michael在评论中的解决方案,但是现在已经有好几年了,确实应该将其标记为已回答)。


0

因为我无法发表评论,所以写答案作为-从http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/DistributionConfigDatatype.html#DistributionConfigDatatype_Elements的文档中,您似乎可以有一个空白的默认根对象:

如果您不想在创建分发时指定默认的根对象,请添加一个空的DefaultRootObject元素。


您可以(尽管某些API库禁止使用它)-但是使用空白的默认根对象会使您在“问题”中看到可笑的ListBucketResult XML响应。
克里斯·莫斯基尼
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.