nginx resolver失败

在配置nginx反向代理时,经常会发现代理的域名无法解析, 在nginx的error日志中可以看到错误码,如下:

2020/03/31 11:43:26 [error] 14393#0: *1695 no resolver defined to resolve www.baidu.com, client: 129.204.84.x,

无法解析域名 www.baidu.com,导致代理请求失败。如何解决?

通常使用proxy_pass 和 upstream server做反向代理时,需要手动指定 resolver。nginx提供了resolver配置命令来让用户自已配置域名解析服务器,命令具体语法如下:

resolver address ... [valid=time] [ipv6=on|off] [status_zone=zone];

如果解析的是公网的域名,如www.baidu.com这些,可以配置一些免费DNS服务,免费DNS服务列表如下:

Google DNS 8.8.8.8, 8.8.4.4
Public DNS+ 119.29.29.29
阿里 DNS 223.6.6.6,223.5.5.5
百度 DNS 180.76.76.76
114 DNS 114.114.114.114,114.114.115.115

我们只需要nginx.conf中配置如下命令,就可以让nginx成功解析域名:

resolver 8.8.8.8 114.114.114.114;

如果是公司私网,则需要配置公司的域名服务器地址。

需要注意的是,当配置多个DNS IP时,nginx会依次尝试用这些IP解析域名,直到成功就停止。如果前面域名解析失败,会导致DNS请求时间过长,所以在配置resolver时要把最优秀的域名IP放在前面,并且要调小解析超时时间。

nginx resolver命令具体解释详见官网resolver

猜你喜欢

转载自blog.csdn.net/fengshenyun/article/details/105219663