CloudFront 支持的网站被重定向到 s3 存储桶 url

Posted

技术标签:

【中文标题】CloudFront 支持的网站被重定向到 s3 存储桶 url【英文标题】:CloudFront-powered website is redirected to s3 bucket url 【发布时间】:2017-10-27 21:03:18 【问题描述】:

我有一个启用静态托管的 S3 存储桶。还有一个由该存储桶提供支持的云端分发。

我已将 CNAME 条目添加到“mywebsite.com”的云端分发中

当我在浏览器中加载“mywebsite.com”时,它会重定向到http://my-bucket.s3-us-west-2.amazonaws.com/index.html

为什么会发生这种重定向?如何阻止该主机名被重写?

编辑:以下是一些建议更改后的设置详细信息:

cloudfront - 备用域:mysite.com cloudfront - 备用域:www.mysite.com cloudfront - 来源:my-bucket.s3-website-us-west-2.amazonaws.com route53 - 托管区域:mysite.com route53 - 一条记录:12345.cloudfront.net route53 - CNAME:www.mysite.com --> mysite.com

以及此设置的效果:

加载中:mysite.com --> 301 重定向到my-bucket.s3-website-us-west-2.amazonaws.com 加载中:www.mysite.com --> 301 重定向到my-bucket.s3-website-us-west-2.amazonaws.com 加载中:my-bucket.s3-website-us-west-2.amazonaws.com --> 200 成功 加载中:d1h3yk3zemxpnb.cloudfront.net --> 301 重定向到my-bucket.s3-website-us-west-2.amazonaws.com 正在加载:http://my-bucket.s3.amazonaws.com/ --> 权限错误

【问题讨论】:

等一天,看看它是否还在发生。我听说有些重定向需要一段时间才能更新。 你在“备用域名”中添加了云端域名吗? 查看上面的更新 问题解决了吗?甚至我也看到了类似的问题。 【参考方案1】:

这里的问题是配置错误的副作用。这种特定行为可能会在创建存储桶后几分钟或几小时内消失,但根本问题不会得到解决。

在 CloudFront 后面配置启用了静态网站托管的存储桶时,您不想从存储桶列表中选择存储桶名称。

在创建分配页面的源设置部分,对于源域名,键入您的存储桶的 Amazon S3 静态网站托管终端节点。例如,example.com.s3-website-us-east-1.amazonaws.com

注意

请务必指定静态网站托管端点,而不是存储桶的名称。

http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-cloudfront-walkthrough.html#create-distribution

从列表中选择 example.com.s3.amazonaws.com 条目,而不是输入存储桶的网站托管端点,最有可能解释这种行为。

S3 更新全球 REST 端点层次结构 *.s3.amazonaws.com 的 DNS,并在创建存储桶后的短时间内将请求发送到存储桶的正确区域的记录,CloudFront 似乎依赖此将请求发送到正确的位置.在初始更新完成之前,S3 将返回一个重定向,CloudFront 将该重定向返回到浏览器……但这一切都表明您没有使用静态网站托管端点作为源域名。

【讨论】:

就是这样!这没有很好的记录,我不得不阅读这个和文档几次才能最终看到差异。在 S3 属性页面上,获取静态托管部分中提供的 URI,而不是存储桶 URI。【参考方案2】:

来自 AWS 支持https://forums.aws.amazon.com/thread.jspa?threadID=216814


这是您创建新存储桶时的预期行为。这 以下页面解释了这个概念: http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html

“Amazon S3 将任何虚拟托管式请求路由到美国东部(弗吉尼亚北部)。 如果您使用美国东部(弗吉尼亚北部),则默认为弗吉尼亚)区域 端点 (s3.amazonaws.com),而不是特定于区域的端点 (例如,s3-eu-west-1.amazonaws.com)。创建存储桶时, 在任何区域,Amazon S3 都会更新 DNS 以将请求重新路由到 正确的位置,这可能需要一些时间。同时,默认 规则适用,您的虚拟托管式请求将发送到美国东部 (弗吉尼亚北部)区域,Amazon S3 使用 HTTP 307 将其重定向 重定向到正确的区域。”

请给 S3 一些时间,直到域名准备好 (通常一个小时左右)。另外,请注意,错误缓存在 默认情况下为 CloudFront。这意味着“307 临时重定向”被缓存 300 秒,除非你改变它: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html

为了再次测试您的云端,请确保缓存有 被无效: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html

希望对您有所帮助。


默认缓存策略有

Default TTL 86400

即 24 小时,因此您可能希望使其无效而不是等待。

来自https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html


如果您使用 AWS 命令​​行界面 (CLI) 使文件无效 并且您指定包含 * 通配符的路径,您必须使用 路径周围的引号 (")。

例如:aws cloudfront create-invalidation --distribution-id distribution_ID --paths "/*"


如果上述任何方法都不起作用并且您正在开发中并且只想获得一些可访问的东西,那么您可以做的另一件事是更改参考或您的存储桶

global — bucket-name.s3.amazonaws.com

regional — bucket-name.s3.region.amazonaws.com

正如论坛上所解释的,这将绕过使用复制存储桶的尝试,只转到一个,这不会失败,因此您不会获得重定向。

你会很容易看到curl

$ curl -I http://blah.cloudfront.net/x.svg
HTTP/1.1 307 Temporary Redirect
Content-Type: application/xml
Connection: keep-alive
x-amz-bucket-region: eu-west-1


$ curl -I http://blah.cloudfront.net/x.svg
HTTP/1.1 200 OK
Content-Type: image/svg+xml
Content-Length: 657
Connection: keep-alive

【讨论】:

以上是关于CloudFront 支持的网站被重定向到 s3 存储桶 url的主要内容,如果未能解决你的问题,请参考以下文章

AWS CloudFront 重定向到 S3 存储桶

Cloudfront 域名无法使用 S3、Cloudfront 和 Route 53 将 HTTP 重定向到 HTTPS

使用 S3/CloudFront 将 www 重定向到非 www,无需单独的存储桶

使用 S3、CloudFront 和源路径的静态网站托管的子文件夹重定向问题

如何在 AWS S3 网站 CloudFront 中设置别名重定向?

使用 CloudFront 和目录重定向的 AWS S3 静态网站托管