我在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分布。
我在这里完全不知所措,任何帮助将不胜感激。
答案 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,它将起作用。