将 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 上的另一个子域?
使用 Route53 和 CloudFront 和 S3 将顶点域重定向到另一个域的子域
Docker + Gunicorn + Nginx + Django:将非 www 重定向到 AWS Route 53 上的 www