亚马逊 S3 静态网站的 HTTPS

93

我想使用Amazon S3和CloudFront托管一个仅支持HTTPS的静态网站。以下是我目前所做的:

  1. 为静态网站托管设置S3存储桶,并将网站文件放入其中
  2. 创建CloudFront分配并指向S3存储桶
  3. 在我的域名服务器中添加一个CNAME记录,用于将子域名' www '指向CloudFront存储桶。

到此为止,一切都进行得很好-我可以使用'www.example.com'地址访问我的网站。但是,我想要该网站仅通过HTTPS可用,因此我从GoDaddy购买了SSL证书。

现在问题是:

  1. 是否有办法在我的S3托管的网站上安装此第三方SSL证书?
  2. 是否有办法在此设置中实现自动http到https重定向?

1
我可以免费做吗? - Piyush S. Wanare
您可以免费从亚马逊获取SSL证书,并且它会自动更新。https://aws.amazon.com/certificate-manager/ 滚动到美元符号图标:) - Costa Michailidis
1
我投票关闭此问题,因为它与编程无关。 - Zach Saucier
1
为什么不将这个问题移动到ServerFault上? - nu everest
@nueverest 因为它太老了,无法迁移。 - gre_gor
5个回答

63

7
详细指南:https://bryce.fisher-fleig.org/blog/setting-up-ssl-on-aws-cloudfront-and-s3/ - elado
3
反馈:Bryce Fisher的指南非常好。 - tresf
6
这里有一个微妙之处。如果S3桶没有配置网站托管,那么您可以为其启用HTTPS。请注意,文档中指出:“网站终端不支持HTTPS”。 - skeller88
6
为了用通俗易懂的语言描述,这里是我的诠释。 一个包含静态网页内容(HTML)的S3存储桶可以通过几次点击转换为网站。该网站只能使用HTTP。如果您想使用HTTPS,则必须使用AWS的Cloudfront服务并将其配置为SNI以免费获得HTTPS。(一些非常旧或奇怪的浏览器不支持SNI。)HTML和其他资源可以以较低的成本存储在S3上。此外,如果您从AWS获取域名,则必须使用他们的弹性负载平衡服务。费用为几美分每GB。 - Mike_Laird
5
我觉得很惊讶这个答案被评为正确答案,因为它根本没有回答问题:正如@skeller88所说,S3的HTTPS无法用于网站托管。 - abbood
显示剩余4条评论

36

1
今天早上我刚刚为我的网站设置了这个。它是一个托管在s3中的静态网站。这非常容易。我只需转到acm管理器,请求证书,花费几个小时调整我的电子邮件设置(最终在等待确认电子邮件时公开了我的WHOIS信息),然后设置route53指向cloudfront端点。非常高兴我找到了这条评论。 - paranoid
1
@paranoid 通过这个,我可以将我的S3网站作为仅支持HTTPS的主机吗? - Piyush S. Wanare
1
@PiyushS.Wanare 是的,你可以! - barbolo
将HTTPS链接放入Route53的CNAME记录中。 - Costa Michailidis
@paranoid 不确定您所说的“cloudfront endpoint”是什么意思。我从哪里获取这些信息? - abbood
@abbood 如果您前往CloudFront分发,选择要使用的分发,然后单击“分发设置”(或仅单击ID),在常规选项卡中,您将看到“域名”。我在我的Route53记录中使用了这个 - 它是一个A记录,别名目标是CloudFront域名。更多信息请参见:https://docs.aws.amazon.com/zh_cn/Route53/latest/DeveloperGuide/resource-record-sets-values-alias.html#rrsets-values-alias-alias-target - paranoid

17

7
每月 600 元。 - Pacerier
11
如果您希望拥有一个专属IP地址,您需要支付600美元。如果您可以使用SNI(不受旧版浏览器支持),则无需额外收费。 - Martin OConnor
2
如果您愿意仅支持现代浏览器(通过SNI),那么现在成本会更低:http://aws.amazon.com/about-aws/whats-new/2014/03/05/amazon-cloudront-announces-sni-custom-ssl/ - Andrew Newdigate
现在这是免费的!https://aws.amazon.com/certificate-manager/ 向下滚动到美元符号图标。此外,我认为它们会自动更新。而且设置就像输入您想要在证书上的域并单击随后的电子邮件中的验证链接一样简单。 - Costa Michailidis

3

对我来说,我需要将一个简单的React网站上传到S3。正如barbolo所描述的那样,您需要证书才能通过SSL访问网站。如果要部署的静态站点足够简单,您可以:

  1. 上传到S3。
  2. 不要选择“静态网站托管”
  3. 将所有相对链接(到css、js等)转换为绝对链接。

例如,从/css/media.css转换为https://s3-region-amazonaws.com/bucket-name/css/media.css(对我来说,我只需要更改index.html中的链接)

  1. 仅使存储桶的内容公开。

就这样。您可以通过https访问索引文件。

一个简单的站点是一个具有指向某些CSS和JS页面的主index.html文件的站点。


非常棒。谢谢。 - user1874634
如果你的应用程序面向生产,这是一个不好的想法。 - Sébastien
Sébastien,请与我们分享更多细节,为什么这是个坏主意。我们将公共读取访问权限授予对象而不是存储桶。 - alexopoulos7
这是一种好的、最简单的方法,但请记住,对于应用程序中的每个单独文件,请求都会通过互联网传输,这将降低应用程序的性能。在这种情况下,使用CloudFront是最好的选择。 - Nitesh B.
@NiteshB.CloudFront 在您需要频繁更新 S3 对象时会带来麻烦 - Dustin Sun

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接