Amazon web services 处理Cloudfront/S3网站的最佳方式是将www重定向到裸域

Amazon web services 处理Cloudfront/S3网站的最佳方式是将www重定向到裸域,amazon-web-services,amazon-cloudfront,Amazon Web Services,Amazon Cloudfront,我有一个网站,我希望www前缀版本重定向到裸域 在寻找不同的解决方案后,我在这里找到了一个封闭的主题,答案似乎很有用: 然而,我有一个问题,如果我更新S3存储桶中的根对象“index/html”,它可能会在Cloudfront提供新版本的前一天出现。我甚至手动使该文件无效,虽然它正确地更新了“index.html”文件,但Cloudfront仍然为旧文件提供服务 为了更好地解释,如果我输入:,它将提供新版本。但是如果我输入,它将提供旧的index.html 我继续在Cloudfront发行版(对

我有一个网站,我希望www前缀版本重定向到裸域

在寻找不同的解决方案后,我在这里找到了一个封闭的主题,答案似乎很有用:

然而,我有一个问题,如果我更新S3存储桶中的根对象“index/html”,它可能会在Cloudfront提供新版本的前一天出现。我甚至手动使该文件无效,虽然它正确地更新了“index.html”文件,但Cloudfront仍然为旧文件提供服务

为了更好地解释,如果我输入:,它将提供新版本。但是如果我输入,它将提供旧的index.html

我继续在Cloudfront发行版(对于裸域)的默认根对象属性中添加了“index.html”,它立即按照我的要求工作。仅键入域(不添加/index.html)返回新版本

然而,这与我刚刚链接到的线程中的答案相反,该线程明确表示在使用两个发行版执行重定向时不设置“默认根对象”。我希望更好地理解这个“默认根对象”,以及是否有更好的方法确保根对象正确更新缓存的版本


谢谢。

如果你真的把
index.html/
作为默认的根对象,并且你的CloudFront发行版指向了bucket的网站托管端点,并且成功了,那么你几乎肯定是在bucket中提供了一个名为index.html/的对象,它将作为文件夹出现在你的bucket中,或者是名为index.html的文件夹中名为index.html的对象。后面的斜杠不属于新的。这也许可以解释这种奇怪的行为。但这也可能是你问题中的一个输入错误

重要的是。。。CloudFront的一个目的是最大限度地减少对后端的请求,并将副本缓存在距离频繁请求位置较近的位置。在S3中更新对象并不是为了立即更新CloudFront服务的内容,除非您已经将其配置为这样做。一种方法是在将对象元数据保存到S3时设置(例如)
Cache Control:public,max age=600
。这将告诉CloudFront永远不要提供超过600秒(10分钟)前从S3获得的对象的缓存副本。如果不设置此选项,默认情况下,CloudFront在24小时内不会返回检查(“默认TTL”)

这只在一个方向上起作用——它告诉CloudFront允许在不检查更新的情况下保留缓存副本多长时间。它没有告诉CloudFront在检查之前必须等待那么长时间。不经常请求的对象可能在其最大期限到期之前由CloudFront释放。下一个请求从S3获取一个新副本

如果您需要立即从CloudFront的缓存中擦除对象,这称为缓存。您请求失效的每个路径(不是每个文件)的费用为0.005美元,但每个AWS帐户每月前1000美元的费用为0.00美元。您可以通过请求对
/*
进行无效化来使所有文件无效。这使得S3保持不变,但CloudFront会丢弃在失效请求之前缓存的任何内容

默认的根对象是一个遗留特性,由于S3引入了静态网站托管存储桶,因此通常不再需要它。在此之前,如果您将CloudFront指向bucket的REST端点,那么访问web站点根目录的人将看到您所有对象的列表。显然,这几乎总是不可取的,因此默认的根对象允许您在站点的根位置替换不同的页面


通过S3中的静态托管,您可以在站点上的任何“目录”中使用索引文档,这使得CloudFront选项——它只在站点的根目录下工作,而不在索引文档可用的任何地方工作。因此,现在使用此功能相对不常见。

如果您真的将
index.html/
作为默认根对象,并且您的CloudFront发行版指向承载bucket端点的网站,并且它起到了作用,然后,几乎可以肯定,您在bucket中提供了一个名为index.html/的对象,该对象将作为文件夹出现在bucket中,或者在名为index.html的文件夹中提供一个名为index.html的对象。后面的斜杠不属于新的。这也许可以解释这种奇怪的行为。但这也可能是你问题中的一个输入错误

重要的是。。。CloudFront的一个目的是最大限度地减少对后端的请求,并将副本缓存在距离频繁请求位置较近的位置。在S3中更新对象并不是为了立即更新CloudFront服务的内容,除非您已经将其配置为这样做。一种方法是在将对象元数据保存到S3时设置(例如)
Cache Control:public,max age=600
。这将告诉CloudFront永远不要提供超过600秒(10分钟)前从S3获得的对象的缓存副本。如果不设置此选项,默认情况下,CloudFront在24小时内不会返回检查(“默认TTL”)

这只在一个方向上起作用——它告诉CloudFront允许在不检查更新的情况下保留缓存副本多长时间。它没有告诉CloudFront在检查之前必须等待那么长时间。不经常请求的对象可能在其最大期限到期之前由CloudFront释放。下一个请求从S3获取一个新副本

如果您需要立即从CloudFront的缓存中擦除对象,这称为缓存。您请求失效的每个路径(不是每个文件)的费用为0.005美元,但每个AWS帐户每月前1000美元的费用为0.00美元。您可以通过以下方式使所有文件无效: