繁体   English   中英

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

[英]How to redirect non-www traffic to www for site hosted on EC2 instance behind CloudFront?

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

从这里的其他问答中,我能够在 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 分配配置为指向该重定向存储桶时,请确保输入存储桶的网站托管终端节点 - 不要从源域名下拉列表中选择存储桶清单。

从现有发行版的备用域名设置中删除example.com ,并在新发行版上对其进行配置。

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

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

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

长答案是:

没有什么好办法,但有办法。 我猜。

我在他们的论坛中看到 AWS 员工推荐的 S3 和 EC2。 正如您所指出的,S3 是非选项。 EC2 可能是最“正确”的,直到 route53 或 cloudfront 可以处理这个问题。

  1. 创建一个 ec2 Web 服务器并安装适用于 example.com (letsencrypt) 的 ssl
  2. 将其配置为重定向 example.com -> www.example.com
  3. 添加一条指向ec2服务器的A记录
  4. (这将不起作用,因为 EC2 不支持公共 IPv6)添加指向 ec2 服务器的 AAAA 记录

您可能可以跳过 IPv6 支持,但如果您需要它,ELB 会支持它——所以玩得开心。

您还需要一个 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 步的)cloudfront 分配分配给 53 号路由上的“www.example.com”。

就是这样!!

补充说一下,您不能将 cloudfront 连接到私有子网中的 ec2 实例。 公共子网中的 ec2 实例可以连接到 cloudfront。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM