【发布时间】:2019-06-12 05:01:48
【问题描述】:
我无法使用托管在 S3 上的静态网站设置 HTTPS。我遵循了官方文档和一些教程,但仍然无法解决它。我的设置如下。
首先,我通过 AWS Certificate Manager 申请 SSL 证书。事实上,我已经请求了其中的 2 个,但它们都没有帮助使 HTTPS 工作。 SSL 证书域如下所示。我已验证状态为issued。
- *.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 Origin
行为是
- 路径模式=
Default(*) - 来源或来源组=
S3-sub.mydomain.com - 查看器协议策略=
Redirect HTTP to HTTPS
在不同的教程网站上,我看到推荐的 Viewer Protocol Policy 是任意值之一(例如 HTTP and HTTPS、Redirect HTTP to HTTPS、HTTPS Only)。我尝试了所有 3 个值,但没有获得预期的效果(修补成本非常高,因为每次更改都需要 15 分钟以上的时间来部署)。
在 CloudFront 分配的 Status=Deployed 和 State=Enabled 之后,我尝试通过 HTTPS 访问我的站点,但它只是挂起并超时。 HTTP 访问仍然可以正常工作,这与我对 Viewer Protocol Policy=Redirect HTTP to HTTPS 的理解背道而驰。
关于我在这里做错了什么有什么想法吗?许多教程建议使用端到端 AWS 服务(例如 DNS)来简化设置,但我已经在 Google 注册了我的域。
请注意,this post 是关于仅限 VPN 访问的 HTTPS,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>
【问题讨论】:
标签: amazon-web-services ssl amazon-s3 amazon-cloudfront