解决Nginx no resolver defined to resolve问题

在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;


「倘若有所帮助,不妨酌情赞赏!」

Holmesian

感谢您的支持!

使用微信扫描二维码完成支付


相关文章

发表新评论