【问题标题】:AWS CloudFront err_too_many_redirectsAWS CloudFront err_too_many_redirects
【发布时间】:2019-12-11 12:31:06
【问题描述】:

我使用 S3 来托管我的静态网站(它是一个 Angular 页面)和 Route 53 以便能够使用我拥有的域。 (我在 Hostgator 购买了域名)。每当我在这里说和使用“example.com”时,请注意它与我购买的域名相同。在 S3 中,我必须存储桶。我们称它们为 www.example.com 和 example.com。 example.com 拥有应用程序本身,它被设置为静态网站托管。它还具有适当的存储桶策略的公共许可。 www.example.com 只是一个重定向存储桶,它被设置为一个静态网站托管,仅用于重定向请求。在此存储桶中,“目标存储桶或域”是“example.com”存储桶。

在 Route 53 中,我有一个名为“example.com”的托管区域。在那里,我有 4 个记录集。两个用于设置我购买的用于 AWS 的域。它是一个“NS - 名称服务器”和一个“SOA - 授权开始”。它们已正确配置为托管我的域名。另外两个是“A - IPv4 地址”,一个名为“example.com”,另一个名为“www.example.com”。在这两种情况下,别名目标是我在 S3 中的“example.com”存储桶。

到目前为止,我一直在关注文档,并且效果很好。我可以在浏览器中输入“example.com”或输入“www.example.com”来加载我的域,这会重定向到“example.com”并加载我的应用程序。到目前为止,一切都很好。该应用程序正在运行,但当然没有 SSL 证书。

然后我在 CloudFront 创建了一个分配来使用我的 SSL 证书。在分发中,我将 Origin 设置为 S3 上我的“www.example.com”存储桶的端点。我设置为 www.example.com、example.com 的 CNAMEs 属性。我使用了我的 SSL 证书,一切都很好地部署了发行版。到目前为止一切顺利...

在 AWS S3,在 www.example.com 存储桶中,在重定向请求的协议中,我将其设置为“https”,如文档所述。

然后,在 Route 53 中,我使用我创建的 CloudFront 分配设置了前面提到的两个“A - IPv4 地址”记录集的别名目标。

就是这样。应该完成,但是当我使用浏览器访问“example.com”时,总是会收到此错误:

'err_too_many_redirects'

有趣的是 URL 变得安全了,带有 https 和绿色挂锁。但是应用程序没有加载。从 www.example.com 到 example.com 的重定向仍然有效。

文档:

https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/tutorial-redirecting-dns-queries.html

https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/migrate-dns-domain-inactive.html#migrate-dns-get-zone-file-domain-inactive

https://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html

【问题讨论】:

    标签: amazon-web-services ssl amazon-s3 amazon-cloudfront amazon-route53


    【解决方案1】:

    在分发中,我将 Origin 设置为我在 S3 的“www.example.com”存储桶的端点。

    您已将 CloudFront 分配指向错误的存储桶。这是第一个问题。您将所有内容都指向始终重定向每个请求的存储桶。

    我设置为 www.example.com、example.com 的 CNAMEs 属性。

    您有两个存储桶,但只有一个 CloudFront 分配。这是第二个问题。您需要两个 CloudFront 分配,一个用于处理 example.com,另一个用于处理 www.example.com。每一个只有一个备用域名(“CNAME”)值并指向匹配的存储桶。

    【讨论】:

    • 只是想知道:我还有一个在 Elastic Beanstalk 上运行的 node.js 服务器。可以将其配置为 'example.com/api' ???
    • 还是使用 'api.example.com' 会更好?有什么更好的?
    • @Anderson 在 example.com 发行版中,创建一个指向 beanstalk URL 的新 Origin,然后创建两个新的缓存行为——一个匹配路径模式 /api,一个匹配 /api/*——并配置这些新的缓存行为以使用您刚刚创建的新源。
    • 还要注意,当 beanstalk 收到请求时,客户端请求的 整个 路径将通过,因此 beanstalk 会将 /api/foo 视为 /api/foo 而不是只是/foo。假设路径模式将从请求中删除是一些人常犯的错误。可以使用 Lambda@Edge 原始请求触发器修改 CloudFront 传递到后端的路径,但这通常是不必要的练习,除非您将请求传递到无法修改的系统。
    • "您有两个存储桶,但只有一个 CloudFront 分配。这是第二个问题。您需要两个 CloudFront 分配,一个用于处理 example.com,另一个用于处理 www.example.com" 好吧, Amazon CloudFront 文档明确告诉您对子域和根域使用相同的 CloudFront 分配。见docs.aws.amazon.com/AmazonS3/latest/dev/…
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2017-07-31
    • 2017-01-16
    • 1970-01-01
    • 2017-07-24
    • 2015-06-16
    • 2019-08-22
    • 1970-01-01
    相关资源
    最近更新 更多