解决Nginx no resolver defined to resolve问题
提示:本文更新于 5546 天前,技术内容可能已发生变化,仅供参考。
					在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;「倘若有所帮助,不妨酌情赞赏!」
感谢您的支持!
使用微信扫描二维码赞赏
