如何将非www流量重定向到位于CloudFront后面的EC2实例上托管的网站的www?

时间:2018-01-10 22:27:09

标签: amazon-web-services redirect amazon-cloudfront amazon-route53

我在CloudFront后面的单个EC2实例上托管网站,并且需要将所有非www流量重定向到www。

从其他Q / A开始,我可以在Route53上配置A记录,将来自example.com的流量重定向到www.example.com。但是,这仅适用于http流量,而不适用于https流量。

如何将裸(非www)网址的 https 流量重定向到我的规范网址https://www.example.com

我知道已经提出了类似的问题,但我没有看到任何与我相同的配置(大多数是针对S3存储桶托管的网站或从www重定向到非www)。

当前网址处理情况

https://www.example.com - Canonical URL for the site, handled by CloudFront
http://www.example.com - CloudFront redirects to https://www.example.com
https://example.com - Unreachable!!!
http://example.com - Route53 redirects to https://www.example.com via S3 bucket

其他细节

CloudFront分配使用AWS生成的证书,该证书涵盖以下域:

*.example.com
example.com

分发中列出的替代域名(CNAME)是:

www.example.com
example.com

Route53有以下A记录:

www.example.com -> CloudFront distribution
example.com -> S3 bucket, configured to redirect to www.example.com

3 个答案:

答案 0 :(得分:4)

就像我在this answer to a slightly different question中所描述的那样,解决方案是在空桶前面为您想要重定向的域名变体创建第二个CloudFront分配。

将存储桶配置为重定向,当您将第二个CloudFront分配配置为指向该重定向存储桶时,请确保键入存储桶的网站托管端点 - 不要从源域名称中选择存储桶下拉列表。

从现有发行版的“备用域名”设置中删除example.com,并在新版本上配置它。

您可以在两个发行版上使用相同的ACM证书。

example.com指向DNS中的新CloudFront分配。

答案 1 :(得分:0)

简短的回答是:没有好办法。 (就个人而言,我不认为hacky变通办法是一种解决方案。)

答案很长:

没有好办法,但有办法。我想。

我已经在他们的论坛中看到AWS员工推荐的S3和EC2。如您所知,S3是非选项。 EC2可能是最正确的#34;直到route53或cloudfront可以处理此问题。

  1. 创建一个ec2 Web服务器并安装适用于example.com(letsencrypt)的ssl
  2. 将其配置为重定向example.com - > www.example.com
  3. 添加指向ec2服务器的A记录
  4. (由于EC2不支持公共IPv6,因此无法正常工作)添加指向ec2服务器的AAAA记录
  5. 你可以逃避IPv6支持,但如果你需要它,ELB支持它 - 所以玩得很开心。

答案 2 :(得分:0)

您还需要一个 Cloudfront 发行版,因此总共有 2 个 Cloudfront 发行版。 然后,您不需要任何 s3 存储桶。只需使用 2 个 Cloudfront 发行版。最后,配置路由 53。

这是下面的说明↓↓↓

第 1 步:创建第一个 Cloudfront 分发版。

配置:

Origin Domain Name : "www.example.com"

Viewer Protocol Policy : "Redirect HTTP to HTTPS"

Cache Policy : "Managed-CachingDisabled" (Default is "Managed-CachingOptimized")

Alternate Domain Names(CNAMEs) : "example.com"

then, select "Custom SSL Certificate".

第 2 步:创建第二个 Cloudfront 分发版。

配置:

Origin Domain Name : "33.72.129.67" (Input your ec2 instance public ip like this)

Viewer Protocol Policy : "Redirect HTTP to HTTPS"

Alternate Domain Names(CNAMEs) : "www.example.com"

then, select "Custom SSL Certificate".

第 3 步:将第一个(第 1 步的)cloudfront 分配分配给路由 53 上的“example.com”。

第 4 步:将第二个(第 2 步的)云端分布分配给 53 号路由上的“www.example.com”。

就是这样!!

补充一点,您无法将 cloudfront 连接到私有子网中的 ec2 实例。公有子网中的ec2实例可以连接到cloudfront。