对于在 CloudFront 后面的 EC2 实例上托管的站点,如何将非 www 流量重定向到 www?
How to redirect non-www traffic to www for site hosted on EC2 instance behind CloudFront?
我在 CloudFront 后面的单个 EC2 实例上托管一个站点,需要将所有非 www 流量重定向到 www。
来自其他 Q/A SO 我能够在 Route53 上配置 A 记录以将流量从 example.com 重定向到 www.example.com。但是,这仅适用于 http 流量,不适用于 https 流量。
如何让裸(非 www)URL 的 https 流量重定向到我的规范 URL https://www.example.com ?
我知道已经有人问过类似的问题,但我没有看到任何具有相同配置的问题(大多数是针对托管在 S3 存储桶中的站点或用于从 www 重定向到非 www) .
目前URL处理情况
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
如我在 中所述,解决方案是在一个空存储桶前面为要重定向的域名变体创建第二个 CloudFront 分配。
配置要重定向的存储桶,当您将第二个 CloudFront 分配配置为指向该重定向存储桶时,请确保您输入存储桶的网站托管端点——不要 select来自源域名下拉列表的存储桶。
从现有分配的备用域名设置中删除 example.com
,并在新分配上进行配置。
您可以在两个发行版上使用相同的 ACM 证书。
将 example.com
指向 DNS 中的新 CloudFront 分配。
简短的回答是:没有好的方法。 (就个人而言,我不认为 hacky workarounds 是解决方案。)
长答案是:
没有好办法,但有办法。我猜。
我在他们的论坛上看到 AWS 工作人员推荐的 S3 和 EC2。正如您所指出的,S3 不是一个选项。在 route53 或 cloudfront 可以处理之前,EC2 可能是最多的 "correct"。
- 创建一个 ec2 网络服务器并安装适用于 example.com (letsencrypt)
的 ssl
- 将其配置为重定向 example.com -> www.example.com
- 添加指向 ec2 服务器的 A 记录
- (这行不通,因为 EC2 不支持 public IPv6)添加指向 ec2 服务器的 AAAA 记录
您可能可以跳过 IPv6 支持,但如果您需要它,ELB 会支持它——所以玩得开心。
您还需要一个云端分发,因此总共有2 个云端分发。
然后,您不需要 任何 s3 存储桶。只需使用 2 个云端发行版 。最后,你配置route 53.
这是下面的说明↓↓↓
步骤 1:创建第一个云端分布。
配置:
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:创建第二个云端分布。
配置:
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 步的)云端分发分配给路线 53 上的“example.com”。
第 4 步:将第二个(第 2 步的)云端分发分配给路线 53 上的“www.example.com”。
就是这样!!
补充说一下,您不能将cloudfront 连接到私有子网中的ec2 实例。 public 子网中的 ec2 实例可以连接到 cloudfront。
我在 CloudFront 后面的单个 EC2 实例上托管一个站点,需要将所有非 www 流量重定向到 www。
来自其他 Q/A SO 我能够在 Route53 上配置 A 记录以将流量从 example.com 重定向到 www.example.com。但是,这仅适用于 http 流量,不适用于 https 流量。
如何让裸(非 www)URL 的 https 流量重定向到我的规范 URL https://www.example.com ?
我知道已经有人问过类似的问题,但我没有看到任何具有相同配置的问题(大多数是针对托管在 S3 存储桶中的站点或用于从 www 重定向到非 www) .
目前URL处理情况
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
如我在
配置要重定向的存储桶,当您将第二个 CloudFront 分配配置为指向该重定向存储桶时,请确保您输入存储桶的网站托管端点——不要 select来自源域名下拉列表的存储桶。
从现有分配的备用域名设置中删除 example.com
,并在新分配上进行配置。
您可以在两个发行版上使用相同的 ACM 证书。
将 example.com
指向 DNS 中的新 CloudFront 分配。
简短的回答是:没有好的方法。 (就个人而言,我不认为 hacky workarounds 是解决方案。)
长答案是:
没有好办法,但有办法。我猜。
我在他们的论坛上看到 AWS 工作人员推荐的 S3 和 EC2。正如您所指出的,S3 不是一个选项。在 route53 或 cloudfront 可以处理之前,EC2 可能是最多的 "correct"。
- 创建一个 ec2 网络服务器并安装适用于 example.com (letsencrypt) 的 ssl
- 将其配置为重定向 example.com -> www.example.com
- 添加指向 ec2 服务器的 A 记录
- (这行不通,因为 EC2 不支持 public IPv6)添加指向 ec2 服务器的 AAAA 记录
您可能可以跳过 IPv6 支持,但如果您需要它,ELB 会支持它——所以玩得开心。
您还需要一个云端分发,因此总共有2 个云端分发。 然后,您不需要 任何 s3 存储桶。只需使用 2 个云端发行版 。最后,你配置route 53.
这是下面的说明↓↓↓
步骤 1:创建第一个云端分布。
配置:
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:创建第二个云端分布。
配置:
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 步的)云端分发分配给路线 53 上的“example.com”。
第 4 步:将第二个(第 2 步的)云端分发分配给路线 53 上的“www.example.com”。
就是这样!!
补充说一下,您不能将cloudfront 连接到私有子网中的ec2 实例。 public 子网中的 ec2 实例可以连接到 cloudfront。