我有一个域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的新手,所以我希望有经验的人可以指出我正确的方向。
答案 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
永久性重定向 - 哪些浏览器本身应该缓存。