我无法为 S3 上托管的静态网站设置 HTTPS。我按照官方文档和一些教程进行了操作,但仍然无法解决问题。我的设置如下。
首先,我通过 AWS Certificate Manager 请求 SSL 证书。事实上,我已经请求了其中的 2 个,但它们都没有帮助使 HTTPS 工作。 SSL 证书域如下所示。我已验证状态为已发布
。
- *.mydomain.com
- sub.mydomain.com
请注意,我的域名已在 Google Domains 中注册。我有 3 个 CNAME 条目,如下所示。
- 一个用于 *.mydomain.com
- 一个用于 sub.domain.com
- 一个用于返回 S3 存储桶的 HTTP
然后,我在 CloudFront 上创建了一个分配。起源和起源组是
- 源域名和路径=
sub.mydomain.com.s3.amazonaws.com
- 源 ID=
S3-sub.mydomain.com
- 来源类型=
S3 来源
行为是
- 路径模式=
默认(*)
- 来源或来源组=
S3-sub.mydomain.com
- Viewer Protocol Policy=
将 HTTP 重定向到 HTTPS
在不同的教程网站上,我看到推荐的 Viewer Protocol Policy
是任何值之一(例如 HTTP 和 HTTPS
,Redirect HTTP to HTTPS
,仅限 HTTPS
)。我尝试了所有 3 个值,但没有获得预期的效果(修改成本非常高,因为每次更改都需要 15 分钟以上的时间才能部署)。
在 CloudFront 分配的 Status=Deployed
和 State=Enabled
之后,我尝试通过 HTTPS 访问我的站点,但它只是挂起并超时。 HTTP 访问仍然正常,这与我对 Viewer Protocol Policy=Redirect HTTP to HTTPS
的理解相反。
关于我在这里做错了什么有什么想法吗?许多教程建议使用端到端 AWS 服务(例如 DNS)来简化设置,但我已经在 Google 注册了我的域。
请注意 this post关于 HTTPS 与仅 VPN 访问,和 this post建议采用全 AWS 方法。第二篇文章很有趣,因为一位用户建议输入 A
记录。目前,我的子域只有一个 CNAME
记录。如果我要创建一条 A
记录,我会指向哪里?
更新:我进入 Google Domains 并删除了指向 S3 存储桶 URL 的 sub
的 CNAME 条目。然后,我添加了一个新的 CNAME,其中 sub
指向 CloudFront URL。当我尝试 HTTPS 时,我可以点击一些东西,但我得到一个 AccessDenied 的 XML。
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>186A2418C76E7526</RequestId>
<HostId>
somelongstring
</HostId>
</Error>
最佳答案
通过另外做 2 件事,我能够让一切正常工作。
在 Google Domains 上,我创建了一个 CNAME,将 sub
指向 CloudFront url。
在 CloudFront 上,为了避免 AccessDenied
消息,我将 Default Root Object
设置为 index.html
。显然,S3 的索引文档设置与 CloudFront 是解耦的。
关于amazon-web-services - 无法让 HTTPS 与 S3 上的静态托管站点一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245353/