Nginx/OpenResty 谨慎配置 8.8.8.8 作为 DNS server,nginxopenresty
Nginx/OpenResty 谨慎配置 8.8.8.8 作为 DNS server,nginxopenresty
目录
- 目录
- 问题
- 分析
- 题外话
问题
Nginx resolver 配置:
resolver 127.0.0.1 8.8.8.8;
项目中两处使用域名,一处为外网 CDN 域名,一处为 MySQL 集群域名(可能为内网私有域名,也可能为外网共有域名)。
部署完之后测试两处都能正常解析,但运行一段时间之后会报 db.example.com could not be resolved (3: Host not found)
错误。
分析
用 dig
测试 DNS server 对两类域名的解析情况:
dig @127.0.0.1 www.baidu.com
dig @127.0.0.1 db.example.com
dig @8.8.8.8 www.baidu.com
dig @8.8.8.8 db.example.com
127.0.0.1
均能得到 ANSWER SECTION
, 例如:
;; ANSWER SECTION:
www.baidu.com. 8 IN CNAME www.a.shifen.com.
www.a.shifen.com. 91 IN A 103.235.46.39
但 dig @8.8.8.8 db.example.com
只能得到 AUTHORITY SECTION
:
;; AUTHORITY SECTION:
. 86398 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2017071900 1800 900 604800 86400
至此,原因很清楚了:Nginx 会轮询使用多个 DNS server, 测试时正好遇到了 127.0.0.1
, 因此没问题,后续轮询到 8.8.8.8
时出现了问题。
题外话
是不是所有的内网 IP 都只能用内网域名映射,答案是:否。AWS 的 MySQL 集群域名就是外网 DNS server(e.g. 8.8.8.8
) 可以解析的,但是其映射的 IP 确实内网 IP.
评论暂时关闭