将 www 子域重定向到 Route 53 上的顶点(裸)域(不使用 S3)?

Posted

技术标签:

【中文标题】将 www 子域重定向到 Route 53 上的顶点(裸)域(不使用 S3)?【英文标题】:Redirect www subdomain to an apex (naked) domain on Route 53 (not using S3)? 【发布时间】:2017-11-16 09:44:16 【问题描述】:

如何使用 Route53 和 CloudFront 将 www 子域重定向到***(裸)域?

请注意我没有使用 S3。 我的网站托管在 AWS ECS 服务上的 ELB 后面。

我尝试使用以下设置创建记录集:

- Name: www 
- Type: CNAME - Canonical name
- Alias: No
- TTL (Seconds): 300
- Value: example.com

在 CloudFront 中,我只将 example.com 顶点列入白名单。结果,请求被阻止。

我也尝试在 CloudFront 中添加 www.example.com 条目并且站点解析,但是浏览器未重定向 example.com

【问题讨论】:

使用 mod_rewrite 怎么样(如果你使用的是 apache)? 感谢@TitiWangsabinDamhore 非常感谢您的评论。如果可能,尝试在 Route53 中执行此操作,但后备是 nginx 据我所知,仅 53 号公路,无法做到这一点。路由53的工作是将域名转换为IP。 HTTP 1.1 允许一个 IP 拥有多个域。客户端请求 www.abc.com,请求 abc.com 的唯一方法是如果有 30x 响应。这不是由 r53 处理的。 【参考方案1】:

AWS 引入了CloudFront functions,它可以操纵流经 CloudFront 的请求和响应。

要将 www 子域重定向到顶点域,您可以使用以下查看器请求函数:

function handler(event) 
  var request = event.request;

  var headers = request.headers;
  var host = request.headers.host.value;

  if (host.startsWith('www')) 
    var response = 
      statusCode: 301,
      statusDescription: 'Moved Permanently',
      headers: 
        location: 
          value: 'https://' + host.replace('www.', ''),
        ,
      ,
    ;

    return response;
  

  return request;

为了使此功能正常工作,CloudFront 分配需要同时配置 www 子域和 apex 域。您还需要为 Route 53 配置子域和顶点域。

对于整个 gTLD 已包含在 HSTS 预加载列表中的域(例如 .dev),由于 S3 网站不支持 https,因此无法使用 S3 进行重定向。

【讨论】:

【参考方案2】:

如果您正在考虑使用 CloudFront 和 Route53 进行重定向,目前您必须为 HTTP Response Generation 编写 Edge Lambda 以进行重定向。

【讨论】:

非常感谢,@Ashan。看起来 HTTP 响应生成正是我正在寻找的。 docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/… Lambda@Edge 仍处于预览阶段。当前的解决方案涉及第二个 CloudFront 分配和一个空存储桶。 ***.com/a/35616286/1695906 感谢@Michael-sqlbot 提供链接。当前的解决方案绝对是我想避免的一种被黑的方法。如果需要,我会进行预览并进行调整。

以上是关于将 www 子域重定向到 Route 53 上的顶点(裸)域(不使用 S3)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将对子域的请求重定向到 Route 53 上的另一个子域?

如何将 Route 53 子域重定向到您网站的子目录

Heroku 使用 AWS Route 53 重定向子域

使用 Route53 和 CloudFront 和 S3 将顶点域重定向到另一个域的子域

Docker + Gunicorn + Nginx + Django:将非 www 重定向到 AWS Route 53 上的 www

Route53上的子域名目录