使用单个CloudFront分配支持HTTPS URL重定向

时间:2016-02-24 22:44:32

标签: amazon-web-services networking amazon-s3 cdn amazon-cloudfront

我有一个域formulagrid.com

我使用AWS S3将其作为静态网站托管。我的问题是我想将www子域重定向到裸域,如下所示:

  • https://www.formulagrid.com -> https://formulagrid.com
  • http://www.formulagrid.com -> https://formulagrid.com

如果两者都设置为静态网站托管,亚马逊提供从S3存储桶重定向到S3存储桶的URL。

所以我要做的就是设置两个桶:

  • formulagrid.com - 实际网站
  • www.formulagrid.com - 仅用于重定向到实际网站

如果您只通过HTTP操作,这种方法非常好,但S3完全不支持HTTPS。

使用HTTPS连接到S3静态网站的方式是在S3存储桶前设置CloudFront分配。然而,CloudFront虽然提供HTTPS,但主要用作CDN。

最初,我在拥有实际网站的S3存储桶前面设置了一个CloudFront分配。一切似乎都在运作:网站分布在CDN上,它有HTTPS,HTTP重定向到HTTPS。

有一个例外。

  • https://www.formulagrid.com是一个完全破碎的页面

在尝试找到错误的来源一段时间之后,我意识到这是因为它没有通过CDN,并且尝试通过HTTPS访问S3并不起作用。< / p>

最后,我最终要做的是在www S3存储桶前面配置另一个发行版,以便可以通过HTTPS访问它。这就是我担心的地方,因为正如我之前提到的,CloudFront的主要目的是成为CDN。

让CDN坐在刚刚重定向到另一个网址的网址前面对我没有任何意义。此外,它还提出了一个问题,即每次点击www子域名的请求是否会被双重收费,因为它在重定向后会点击其他CloudFront分配。

这令人沮丧,因为我试图做一个无服务器&#34;使用Lambda的架构,并且必须配置一个EC2实例才能进行网址重写,这不是我想要做的事情,除非它是我的最后一招。

如果亚马逊提供任何形式的URL重写或者如果CloudFront本身确实重定向,那么解决方案将是微不足道的,但据我所知,这些都不存在(如果他们这样做,请告诉我)。

我是AWS的新手,所以我希望有经验的人可以指出我正确的方向。

1 个答案:

答案 0 :(得分:7)

你的想法太狭隘了 - 这种设置没有任何问题。

  

如果亚马逊提供任何形式的URL重写,解决方案将是微不足道的

他们这样做 - 空桶。

  

S3完全不支持HTTPS。

不适用于网站托管的存储桶,没有...但CloudFront可以。

CloudFront不仅仅是CDN。它也是一个SSL卸载器,Host:标头重写器,路径预置器,地理定位器,地理限制器,安全内容网关,http到https重定向器,错误页面定制器,根页面替换器,Web应用程序防火墙,源标头注入器,动态内容gzipper,基于路径的多源http请求路由器,查看器平台标识符,DDoS缓冲区,区域顶点别名目标...所以不要太挂在“CDN”上或者你在前面堆叠一个服务的事实另一方面 - CloudFront的设计在很大程度上是为了补充S3。他们每个人都专注于存储和交付的某些方面。

所以,你做得对...大部分,无论如何......创建一个存储桶,为网站托管配置它,将其设置为将所有请求重定向到另一个站点(非www)并放置CloudFront在它前面分发 - 使用CloudFront中的存储桶的网站端点URL,而不是下拉列表中的存储桶 - 使用高TTL配置,以便CloudFront将向S3发送最少数量的请求然后放入(免费!)亚马逊证书管理器的SSL证书。 HTTPS备用域路由:已解决。没有服务器,没有故障排除,而且便宜。 费用是用法 - 没有与服务器一样的后台经常性费用。

额外信用:为最便宜的费率层配置重定向CloudFront分配。从更昂贵的位置重定向将被路由到更便宜的边缘位置,或者 - 在CloudFront的选择 - 可以在更高成本的位置服务,但以较低的费率收费。

请注意,大多数情况下,CloudFront应该从其缓存中提供来自S3的重定向...当您配置存储区以将所有请求重定向到另一个主机名时,重定向是301 永久性重定向 - 哪些浏览器本身应该缓存。