【问题标题】:Unable to get HTTPS to work with statically hosted site on S3无法让 HTTPS 与 S3 上的静态托管站点一起使用
【发布时间】: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 HTTPSRedirect HTTP to HTTPSHTTPS 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


    【解决方案1】:

    我可以通过做 2 件额外的事情来让一切正常工作。

    在 Google Domains 上,我创建了一个 CNAME,将 sub 指向 CloudFront 网址。

    在 CloudFront 上,为了避免出现 AccessDenied 消息,我将 Default Root Object 设置为 index.html。显然,来自 S3 的索引文档设置与 CloudFront 是分离的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 2020-01-05
    • 2014-05-13
    • 2015-01-27
    相关资源
    最近更新 更多