Nginx/OpenResty 谨慎配置 8.8.8.8 作为 DNS server

本文介绍了在Nginx配置中,将8.8.8.8设为DNS服务器可能导致的问题。当Nginx解析内外网域名时,如果配置了8.8.8.8,可能会导致内网域名无法正确解析,表现为DNS解析错误。通过dig命令测试,揭示了Nginx在DNS轮询过程中遇到8.8.8.8时解析失败的情况。文章提醒开发者注意配置DNS服务器,避免类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

问题

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值