首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NGINX resolver 配置中的 “坑”

最近我把自己的 OpenResty 升级到了最新的 版本,却发现 dns 解析不能正常工作了:

在 nginx error.log 可以看到下面的错误:

但是我通过 确认 DNS 服务器是没有问题的,起初我怀疑是 的一个 BUG(因为在 版本下是没有这个问题的,并且前些时候我发现这个版本的 也存在个 BUG #1217,让我天真的认为这个版本不太稳定),后来通过抓包发现了其中的猫腻:

可以看到 DNS 服务器确实响应了 NGINX 的 A 记录查询请求,但是 NGINX 还发出了 AAAA 请求(IPv6 解析请求),不过由于我的 dnsmq 没有启用 IPv6,所以并没有响应它。

后来我在 Github Issue 504 找到了关于这个问题的讨论:

So if my OpenResty is built with the —with-ipv6 option, then the nginx builtin resolver will query both IPv4 and IPv6 DNS records. And each request will pick up one DNS record by chance. When getting an IPv6 address, your connect() call receives a “connection refused” error.

原来当 NGINX 启用了 选项时,resolver 就会同时查询 IPv4 和 IPv6 的 DNS 记录。NGINX 会随机选一个 DNS 查询请求,之后再去连接对应的地址。

但是从 开始,nginx 取消掉了 这个参数(参考这里),并且自动启用了 IPv6。所以就发生了上面的异常,解决这个问题也很简单,就是手动关闭掉 resolver 的 IPv6 解析就好:

赞赏是对作者最大的支持

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180110G05C5R00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券