在S3上使用https托管SPA或静态网站的最便宜方法

时间:2019-09-03 00:14:39

标签: amazon-web-services ssl amazon-s3 https amazon-route53

问题

我想托管多个网站,每个网站都使用ssl(https),并且不必花更多的钱。

如果可能的话,我也想继续使用Route53(但不是必需的),因为我知道如何使用它,而且每月只需花费$ 0.50。

背景

我对后端/服务器的了解非常有限。

我已经创建了一些React网站(我认为我正确地使用了static一词,其中一些内容随着javascript的变化而发生了变化),目前我将它们托管在ec2上。我使用certbot(lets-encrypt)为我的网站启用https。域名通过Route53和Namecheap处理。

S3和Cloudfront

我想将我的网站放到S3上以节省成本。我需要https。我看过的大多数tutorials都在谈论使用Cloudfront。看来cloudfront会让我付出类似于ec2所付出的代价,因此对我来说似乎不是一个解决方案。也许我错了?费用会微不足道吗?

Route53和NGINX

看起来我可以使用Route53做到这一点?詹卢卡·卡萨蒂(Gianluca Casati)有answer,但他确实没有提供足够的细节供我使用。

Some other tutorials对此进行了解释,但是谈论设置NGINX服务器,我真的不知道那是什么。我想尽可能避免使用NGINX,但如有必要,我会使用它。

这开始变得非常复杂,所以我想知道是否有更简单的方法。如果不是,则涉及所有步骤


旁注(如果您也可以回答此问题,将会有所帮助,但这不是必需的)

我也想要好的SEO。对于至少一个网站,看起来这将涉及使用rendertron或puppeteer等进行动态渲染。并非我所有的网站都需要这样做,但是一个会。很高兴知道这是否可能。


摘要:

  • 我正在寻找一种经济高效的方法来托管多个静态网站
  • 该方法似乎是通过将每个方法存储在Amazon S3上的
  • 我希望每个网站都具有SSL(HTTPS)
  • 看来Cloudfront可以做到这一点,但无论如何都不会为我省钱
  • 看来有一种使用Route53做到这一点的方法
  • Route53方法可能需要NGINX代理服务器,我不知道大多数情况是什么。

5 个答案:

答案 0 :(得分:5)

我将尝试按顺序为您的问题提供答案。

Cloudfront:费用会微不足道吗?

是的,是的。以下是来自我的AWS账户的随机账单的屏幕截图:

enter image description here

以下是典型的AWS发票上显示的Cloudfront定价明细:

enter image description here

Route53:我可以使用Route53这样做吗?

是的,这将是必要的。 NGINX是不必要的。

您需要的4个AWS服务是:

  • S3:创建一个启用了“网络托管”并且名称与您所需的域url同名的存储桶。例如:“ www.jacobswebsite.com”或“ jacobswebsite.com”
  • Cloudfront:因为您不能直接在S3存储桶上安装SSL证书,但是可以在Cloudfront发行版上安装SSL。
  • Route53:当用户键入URL时用于指向DNS记录的内容。您将以一种简单的方式将“ www.mysite.com” DNS记录指向Cloudfront-而Cloudfront将指向您的S3存储桶。
  • AWS证书管理器:通过它可以生成免费的自动更新浏览器兼容的SSL证书。如果Route53正在为您的域处理DNS,则SSL生成是一键设置,需要等待30分钟。然后,您可以从下拉菜单中将这些SSL证书安装到CloudFront发行版中。

这是基本程序的出色指南:

https://medium.com/@sbuckpesch/setup-aws-s3-static-website-hosting-using-ssl-acm-34d41d32e394

您可以跳过有关SES的基本设置部分,但是,如果您需要设置提交到电子邮件收件箱的表单,那么您可能需要调查一下。

简而言之,答案是肯定的。您可以在没有大量后端服务器知识的情况下使用S3和Cloudfront来实现目标,每月只需花几便士。上述方法和服务正是您的操作方式。

答案 1 :(得分:1)

Jacob,here是使用CloudFront设置HTTPS的官方指南。更具体地说,您要为communication between viewers and CloudFront启用HTTPS。

尽管如上所述,以上链接为您提供了设置的一般信息/理解,但关键的是,您需要通过HTTPS从CloudFront提供多个域。知识中心中的此页面告诉您准确您的需求:https://aws.amazon.com/premiumsupport/knowledge-center/multiple-domains-https-cloudfront/

简而言之:

  1. 在分发设置(CloudFront)中配置CNAME。

  2. 为您的域配置SSL证书(视频说明了如何通过AWS的ACM创建它们,但是您也可以在其他地方购买Wildard或多域证书。Here很不错发布说明它们之间的区别。

  3. 将CNAME指向您的CloudFront域(通过Route53或您使用的任何DNS提供商完成)。

请注意,如果由于旧的浏览器不兼容而无法使用SNI,则将花费更多的钱,因为每个域将需要一个IP-参见下图。 SNI是最具成本效益的选择,我想这就是您的问题所在。您可能想看看here了解更多详细信息。

Image from cheapsslsecurity.com

希望有帮助!

答案 2 :(得分:0)

我们用CloudFront和URL重写规则完全按照您的要求构建了S3上的HTTPS,以获取SEO友好的URL。

https://github.com/icdotdev/iclab.website

按照自述文件中的步骤进行操作,您应该能够以无用的方式托管网站。

  

如果您已经配置了Route 53,则在创建积木时只需输入hosted_zone_id参数即可。

  

如果您已经为您的域颁发了证书,请提供certificate_arn参数。

PS:我是开放项目ic.dev的合著者:)

答案 3 :(得分:0)

您可以将Cloudflare用于此目的。有一个示例可能对您有所帮助: https://www.engaging.io/easy-way-to-configure-ssl-for-amazon-s3-bucket-via-cloudflare/

答案 4 :(得分:0)

如果您正在寻找一种更好的方式来使用 S3 和 Cloudfront 托管您的网站,而无需使用 Lambda 函数,我为此创建了一个分步教程,请查看https://www.youtube.com/watch?v=94DyGswSY6k&t=1475s

相关问题