一、背景
1、Route 53不支持根域名配置CNAME
在使用Route53提供DNS服务时候,在为根域名提供解析的场景下,有一些局限,例如根域名是不能设置cname的。为了进一步理解,我们举例如下:
如果根域名是abc.com
并创建Route53 Public Zone,那么:
- 可以创建名为
www.abc.com
的CNAME记录,将其解析为ALB地址或者CloudFront CDN地址 - 可以创建
abc.com
的A记录,指向IP - 不可以创建根域名
abc.com
的CNAME记录,界面会提示不支持根域名设置CNAME
最后一个限制,不能创建根域名的cname记录,意味着无法将直接在Route 53将abc.com
跳转到www.abc.com
。
2、域名转发的一些Workaround
为了解决这个限制,可以通过设置S3 Static Webhosting静态托管网站,然后在网站上用页面代码做跳转。但是由此需要配置额外的S3做托管,增加额外配置工作量。
3、使用Route 53 Alias别名功能进行跳转
Route 53支持为根域名设置Alias别名,直接跳转到AWS云上资源。详情可参考如下知识库:
https://aws.amazon.com/premiumsupport/knowledge-center/route-53-create-alias-records/
本文以ALB为例,配置过程如下。
二、创建Route 53 CNAME记录
进入Route 53服务界面,找到要配置的根域名,点击创建记录。
在创建解析记录的界面,在子域名位置留空,就表示要配置的记录是对根域名有效。将类型选择为A记录,然后打开Route traffic to alias
的开关。在下拉框中选择Alias to Application and Classic Load Balancer
,然后选择Region,再选择要转发的ALB。最后点击创建。如下截图。
创建完成后的记录如下截图所示。
三、在ALB上配置转发规则
接下来进入负载均衡界面,找到上一步转发目标的负载均衡器。进入监听器标签页,找到80端口和443端口的监听器,接下来要分别修改两个端口的转发规则。如下截图。
进入规则编辑界面,点击➕按钮,添加新的一条转发规则。
本例中希望将abc.com
跳转到www.abc.com
,则进行如下配置:
在配置左侧新的转发规则的位置也就是IF
位置,选择规则类型是Host header
,输入值是根域名例如abc.com
。右侧的THEN
下边部分,选择类型是Redirect to...
,协议选择https
,端口输入443
,在下拉框中选择Custom host, path, query
,然后在Host位置输入要跳转的域名。例如跳转到www.abc.com
,然后点击右上角保存。
配置完成过后,效果如下。
以上是对HTTP协议的监听的支持。接下来对443端口监听器进行同样的设置。
配置ALB完成。
四、测试跳转
为了测试效果,可使用curl请求url头,查看返回结果。执行如下命令:
curl http://bitipcman.com/ -I
返回结果是:
HTTP/1.1 301 Moved Permanently
Server: awselb/2.0
Date: Wed, 29 Jun 2022 09:27:44 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive
Location: https://blog.bitipcman.com:443/
由此表示跳转生效。
现在通过浏览器访问根域名abc.com
,可以看到自动跳转到https://www.abc.com/
。
五、参考文档
How do I create alias records for services hosted in AWS:
https://aws.amazon.com/premiumsupport/knowledge-center/route-53-create-alias-records/