【问题标题】:AWS S3 won't redirect https://www.example.com to https://example.com, but will redirect http://www.example.comAWS S3 不会将 https://www.example.com 重定向到 https://example.com,但会重定向 http://www.example.com
【发布时间】:2020-12-21 03:42:33
【问题描述】:

我在 S3 上设置了我的网站,并以 CloudFront 为前端。就托管等而言,一切正常,但在将https://www.example.com 重定向到https://example.com 时,我遇到了一些奇怪的问题。

我已将站点设置为植根于example.com。我有两个 S3 存储桶,一个用于根域(即example.com),一个用于www.example.com。主要内容托管在example.com 存储桶中,而www 存储桶为空。

www S3 存储桶设置为将所有请求重定向到example.com 域。我已清除协议字段,以便它与原始请求匹配。重定向域只是说example.com

www 存储桶的政策非常基本,但为了完整起见,我将其包含在此处:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "2",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/..."
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::www.example.com/*"
        }
    ]
}

最终发生的事情是我可以成功地将http://www.example.com 重定向到https://example.com,但https://www.example.com/ 只是挂起。在curl 中检查此内容只会导致超时。

在 CloudFront 方面,我的 CF 分发设置使用 example.com 作为备用域,而我的 Origin 仅指向我的 example.com 存储桶。

我将 Route53 用于 DNS,www.example.com A 记录指向 www S3 存储桶,而 example.com 的 A 记录指向 CloudFront 分配。

我在这里完全不知所措,我们将不胜感激。

【问题讨论】:

  • 为什么R53中的www.example.com直接指向bucket?您的存储桶策略仅允许来自 CF 的 OAI 用户访问它。因此,直接访问(即,没有 CF)应该是不可能的。
  • 是的,鉴于没有可下拉的内容,这是一个虚假的策略,但重定向应该首先命中。请记住,该策略适用于 GetItem,但由于没有任何项目,它不应该启动。尽管如此,我仍然需要 www 站点的 DNS 条目,所以这仍然是必要的。
  • S3 网站端点不支持 HTTPS。所以如果你只是直接去bucket s3网站端点,就不会有HTTPS,这可以解释为什么你的https://www.example.com不起作用。
  • 为了提供网络内容,当然可以,但是如果它们只支持http,为什么还要提供匹配重定向设置协议的选项呢?有些东西没有加起来。
  • "Amazon S3 不支持 HTTPS 访问网站。如果您想使用 HTTPS,可以使用 Amazon CloudFront 服务托管在 Amazon S3 上的静态网站。"来自here。但是您写道“example.com/simply 挂起”。您不能按照文档中的说明使用 HTTPS。为此,您必须使用 CF。因此,我不明白为什么您的“www.example.com A 记录指向 www S3 存储桶”。它应该指向 CF,而不是 s3 存储桶。

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


【解决方案1】:

好吧,我终于想通了。感谢 @Marcin 为我指明了正确的方向,感谢一位乐于助人的 Reddit 用户,他为我提供了一个快速的 Lambda 函数。

基本上我不得不使用第二个 CloudFront 分配来处理 www.example.com 域的 HTTPS 前端(就像 @Marcin 提到的),但仅此一项并不能解决问题。即使将存储桶配置为仅执行重定向,底层 S3 存储桶仍返回 403 错误。

为了解决这个问题,我必须创建一个新的 Lambda @ Edge 函数,在 Host 标头中查找 www 前缀,然后通过第二个 CF 实例上的 lambda 执行 301 重定向。我将其添加为 CF 分发的 Viewer-Request 级别触发器,现在一切都符合预期。

【讨论】:

    【解决方案2】:

    您必须为此存储桶 www.example.com 启用 CloudFront 才能访问此 https://www.example.com/ 并指向 www.example.com 存储桶才能正确重定向。

    将 CloudFront 设置为与 example.com 相同的 www.example.com 即可。

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 2015-09-25
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 2011-07-06
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多