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.

相关内容

    暂无相关文章