找回密码
 新建账号

nginx resolver 不会在 IPv6 IPv4 域名解析服务器之间回落

[复制链接]
大郎 发表于 2026-4-7 13:10 | 显示全部楼层 |阅读模式
nginx resolver 不会在 IPv6 IPv4 域名解析服务器之间回落,这是一个很大的坑。而且 nginx resolver 的 ipv4=on|off ipv6=on|off 也不符合望文生义的预期。
  1. resolver [2606:4700:4700::1111] [2001:4860:4860::8888] 1.1.1.1 8.8.8.8 ipv4=on ipv6=off;
复制代码
看到上面这样的 nginx 配置,很多人会将它理解为:将 2606:4700:4700::1111、2001:4860:4860::8888、1.1.1.1、8.8.8.8 用作 nginx 解析域名的 DNS 服务器,ipv4=on 让 nginx 使用 IPv4 域名解析服务器,ipv6=off 让 nginx 不使用 IPv6 DNS 服务器,也就是最终 nginx 会使用 1.1.1.1、8.8.8.8 做解析域名的 DNS 服务器,而不使用 2606:4700:4700::1111、2001:4860:4860::8888。

实际上,这种理解是大错特错。ipv4=on|off 和 ipv6=on|off 用来指定是否返回被解析域名的 IPv4  和/或 IPv6 地址,而不是用来指定是否让 nginx 选择 IPv4 和/或 IPv6 的 DNS 服务器地址。和官方文档所述不同,nginx 似乎根本不会在 IPv6 和 IPv4 两种类型的域名解析服务器之间回落,它只会在相同类型的域名解析服务器之间切换下一个来尝试。上述配置生效后,如果服务器所在的设备根本没有 IPv6 网络,nginx 会在两个 IPv6 域名解析服务器之间切换尝试,然后直接报错。
  1. 2026/04/07 12:03:25 [crit] 18230#18230: connect() failed (101: Network is unreachable) while resolving, resolver: [2606:4700:4700::1111]:53
  2. 2026/04/07 12:03:25 [crit] 18230#18230: connect() failed (101: Network is unreachable) while resolving, resolver: [2001:4860:4860::8888]:53
复制代码
如果设备只有一种类型的网络连接,就不要配置另一种类型的域名解析服务器地址,这样才能保证 resolver 正常按预期工作。

手机版|轻松e站

GMT+8, 2026-4-7 15:23

快速回复 返回顶部 返回列表