AWS Route53裸域名无法访问问题排查求助
看起来你遇到了裸域名(banuka.com)无法访问,但子域名(nginx.banuka.com)正常的问题,结合你提供的dig结果,我来帮你一步步排查可能的原因:
可能的排查方向和解决方法
1. 先确认Route53中的裸域名A记录是否正确配置
从你的dig结果来看,查询banuka.com时ANSWER段为空,只有SOA记录,这说明Route53的权威DNS目前没有返回该域名的A记录。请检查:
- 在Route53托管区中,裸域名的A记录是否确实创建成功:记录名应该留空或者填写
@(Route53中@代表裸域名),记录类型为A,值是你的EC2公网IP,并且状态显示为已生效 - 有没有误将裸域名的记录创建成
www.banuka.com之类的,导致裸域名本身没有对应的解析记录
2. 验证Route53权威DNS的直接解析结果
绕过本地递归DNS,直接查询Route53的权威服务器,看看是否能返回A记录。在终端执行以下命令:
dig banuka.com @ns-920.awsdns-51.net
如果这个命令能返回正确的EC2 IP,说明是本地DNS缓存或者你使用的递归DNS服务器还没更新记录,等待TTL过期(默认Route53的TTL可能是300秒,也就是5分钟),或者手动刷新本地DNS缓存即可。
如果这个命令也返回空的ANSWER段,那肯定是Route53的记录配置有问题,回到第一步重新检查。
3. 确认Namecheap的NS记录是否完全同步
检查你在Namecheap中设置的DNS服务器,是否和Route53托管区提供的全部4个NS记录完全一致,有没有拼写错误或者遗漏。可以通过以下命令验证当前域名的NS记录:
dig ns banuka.com
返回的NS记录应该和Route53托管区页面显示的完全相同,否则域名解析请求还没有完全转到Route53,导致裸域名的记录无法被查询到。
4. 检查Nginx的server配置(虽然子域名正常,但也需要确认)
子域名能访问说明EC2和安全组没问题,但要确保Nginx的server块同时支持裸域名:
打开你的Nginx配置文件,确认server_name指令包含banuka.com,比如:
server { listen 80; server_name banuka.com nginx.banuka.com; # 同时包含裸域名和子域名 root /usr/share/nginx/html; index index.html index.htm; # 其他配置... }
如果server_name只写了nginx.banuka.com,那即使域名解析正常,Nginx也不会处理裸域名的请求,会返回默认页面或者错误。修改后记得重启Nginx:
sudo systemctl restart nginx
5. 排查DNS propagation延迟
DNS记录的全球生效可能需要一些时间,尤其是刚修改NS记录的情况下。如果前面的检查都没问题,可以等待30分钟到1小时,让DNS记录完全传播,再尝试访问裸域名。
备注:内容来源于stack exchange,提问作者Jananath Banuka

