解决Nginx no resolver defined to resolve问题
注意:本文最后更新于 2542 天前,有关的内容可能已经发生变化,请参考使用。
在Ngnix中如果用变量作为反向代理的地址时,容易出现“no resolver defined to resolve xxx.xxx”的问题,例如:
server
{
listen 80;
server_name ~^(.*).lib.ecjtu.net$;
access_log /var/log/nginx/access-lib_ecjtu.log;
set $key $1;
location /{
auth_basic "What's your password?";
auth_basic_user_file /www/lib_ecjtu_net/htpasswd;
proxy_pass http://$key;
}
}
以上配置的作用是将泛解析.lib.ecjtu.net的前缀部分存入变量$key并用于反向代理的地址,简单来说就是:我使用holmesian.org.lib.ecjtu.net访问的话就是通过服务器反向代理访问holmesian.org。
但是如果是这样将变量作为反向代理的地址的话会在 Nginx 0.6.18以后的版本中都会提示“ no resolver defined to resolve”的错误,而在proxy_pass 中直接设置地址却不会。
原因是 Nginx 0.6.18以后的版本中启用了一个resolver指令,在使用变量来构造某个server地址的时候一定要用resolver指令来指定DNS服务器的地址,所以解决这个问题的方法很简单:在nginx的配置文件中的http{}部分添加一行DNS地址即可
resolver 8.8.8.8;
此外,如果有ipv6环境的机器,还可以加上ipv6=off指令,避免一些奇葩原因导致的no resolver defined to resolve错误。
resolver 8.8.8.8 ipv6=off;
「倘若有所帮助,不妨酌情赞赏!」
感谢您的支持!
使用微信扫描二维码完成支付