【问题标题】:301 redirect loop when setting up static website with S3, Cloudfront, SSL使用 S3、Cloudfront、SSL 设置静态网站时出现 301 重定向循环
【发布时间】:2020-10-24 22:21:45
【问题描述】:

我正在尝试使用 HTTPS 在 AWS 中为 example.comwww.example.com 托管一个静态网站。我当前的设置正确地重定向到example.com,但在 Chrome 中出现了无数的 301 重定向。

最有希望的信息是本教程: Cloudfront redirect www to naked domain with ssl

这个stackoverflow的答案: Cloudfront redirect www to naked domain with ssl

我有两个 S3 存储桶。在 S3 的 AWS 控制台中,www.example.com 设置为通过 https 重定向到 example.comexample.com 设置为托管静态网站。

我有两个 Cloudfront 发行版,每个发行版都使用来自 us-east-1 区域的 ACM 生成的 SSL 证书。源域名是通过复制/粘贴相应的 S3 端点 URL 而不是使用下拉自动填充来设置的。备用域名设置为每个分配的匹配域 www.example.comexample.com

在 Route53 中,我有两个 A 记录,每个域一个。两者都能够看到其对应的 Cloudfront 发行版填充了别名菜单中的下拉菜单,并且已被选中。

即使在我使用长格式 url 直接访问 S3 端点的情况下,301 错误似乎也来自云端(Chrome devtools 中的 http 响应的值为 X-Cache: Redirect from cloudfront)。

该网站只不过是一个带有一些文本的 index.html。没有 javascript 在玩。

非常感谢任何帮助。燃烧的日子在这..

【问题讨论】:

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


    【解决方案1】:

    我之前看到的解决方法如下:

    • 有一个用于顶点的 CloudFront 分配 (example.com)
    • 拥有www 子域的 CloudFront 分配
    • 从应用程序或任何分发中删除任何 301 重定向
    • 添加一个 Lambda@Edge 函数以在 CloudFront 分配上为 www 域执行302 redirect仅限

    重定向函数如下所示

    def lambda_handler(event, context):
     
         # Generate HTTP redirect response with 302 status code and Location header.
         uri = request = event['Records'][0]['cf']['request']['uri']
        
         response = {
             'status': '302',
             'statusDescription': 'Found',
             'headers': {
                 'location': [{
                     'key': 'Location',
                     'value': 'https://example.com/' + uri
                 }]
             }
         }
         
         return response
    

    您看到这个的可能原因是 example.com 也在重定向到它自己。

    还使用302 而不是301 进行测试。 301 是永久重定向,在尝试回滚已访问此 URL 的浏览器的任何更改时可能会导致问题。

    【讨论】:

    • 感谢您的回复.. 但是,我的意思是,我只是想在使用 SSL 的 S3 存储桶上建立一个简单的文本网站!没有任何编程逻辑(甚至没有javascript)。我真的需要一个 lambda 吗?好像有点多?也许我错过了什么。
    • 嗯,也许我误解了这个问题。似乎您正在执行重定向,但它陷入了循环,您希望它重定向一次。你能确认一下吗?
    • 再次感谢您。是的,我认为这是真的。但是,这似乎是许多教程的常见配置,并且没有一个提到必须使用 lambda。也许您的解决方案会起作用,但是,重定向只是从 www.example.com 到 example.com。作为静态托管菜单的一部分,S3 允许从一个存储桶重定向到另一个存储桶。我没有介绍任何启动重定向的代码。这么简单的事情,要租 lambda $ 似乎很费钱?
    • 是的,S3 也可以进行重定向,但可能有点繁琐,Lambda@Edge 只是许多开发人员的首选路线,主要是因为它适用于所有来源,并从来源中删除了这个逻辑 :)
    • 没问题,很高兴我能帮上忙 :)
    【解决方案2】:

    如果您正在寻找一种更好的方式来使用 S3 和 Cloudfront 托管您的网站,而无需使用 Lambda 函数,我为此创建了一个分步教程,请查看 https://www.youtube.com/watch?v=94DyGswSY6k&t=1475s

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-14
      • 2020-04-06
      • 2021-12-16
      • 2020-09-21
      • 2018-08-05
      • 2020-08-25
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多