AWS S3不会将https://www.example.com重定向到https://example.com,但是会将http://www.example.com重定向

时间:2020-09-02 01:50:36

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

我在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端,我使用example.com作为备用域进行CF分发设置,而我的Origin仅指向我的example.com存储桶。

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

我在这里完全不知所措,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

好吧,我终于弄明白了这一点。感谢@Marcin为我指出正确的方向,并感谢为我提供快速Lambda功能的有用Reddit用户。

本质上,我不得不使用第二个CloudFront发行版来处理www.example.com域的HTTPS前端(如@Marcin提到的那样),但这本身并不能解决问题。即使该存储桶配置为仅进行重定向,底层的S3存储桶仍返回403错误。

要解决此问题,我必须创建一个新的Lambda @ Edge函数,该函数在www标头中寻找Host前缀,然后通过第二个CF实例上的lambda进行301重定向。我将其添加为CF分发中的Viewer-Request级别触发器,现在所有的单词都如预期的那样。

答案 1 :(得分:0)

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

www.example.com设置与example.com相同的CloudFront,它将起作用。

相关问题