nginx 做反向代理 因为域名解析失败 返回502

现象:稳定运行的环境,nginx 做反向代理,突然有一天对客户端返回502。
排查过程:
        1、第一步查看nginx的日志提示如下错误 :

7446 proxy_connect: upstream connect failed (111: Connection refused) while connecting to upstream, client: 172.22x.xx.xx, server: , request: "CONNECT xxxx.xxxx.com:443 HTTP/1.0"

实际使用telnet 命令 telnet xxxx.xxxx.com 443端口是通的;这就有点迷茫的了明明对方端口是服务中的 nginx 为什么连接不上呢?

        2、第二步网络抓包

使用tcpdump命令尝试抓包查看nginx与对端的连接过程

tcpdump -i eth0 host 对方ip 发现抓不到任何网络包。说明nginx都还没有把域名转换成ip 考虑是不是域名解析的问题。打开nginx 配置文件nginx.conf 发现有一行配置:

 resolver     127.0.0.1;

这时想起之前配置过本地的域名解析服务dnsmasq nginx的DNS解析有动态和静态两种 这里通过resolver指令和变量来指定DNS服务的是动态解析的用法。

通过查看本地域名解析服务的解析  nslookup xxxx.xxxx.com  127.0.0.1 发现出现是另一个IP,这里问题找到了 是nignx 使用的本地DNS域名解析服务返回了错误的IP 难过nginx 连不上对方端口

       3、第三步修改本地DNS

      这里需要基本了解一下dnsmasq这个本地域名解析服务的解析过程:

dnsmasq先去解析hosts文件, 再去解析/etc/dnsmasq.d/下的*.conf文件,而且这些文件的优先级要高于dnsmasq.conf,咱们自定义的resolv.dnsmasq.conf中的DNS也被称为上游DNS,这是最后去查询解析的。

       ok修改hosts 文件添加一行  xxx.xxx.xx.xxx  xxxx.xxxx.com 

查看是否生效:nslookup xxxx.xxxx.com  127.0.0.1 ,结果IP没有变化,原来需要重启dnsmasq 服务,dnsmasq是启动加载hosts文件 非动态读取的,

        重启dnsmasq  : service  dnsmasq restart

   再此查看nslookup xxxx.xxxx.com  127.0.0.1 ;ok 这次IP解析正确了

        nginx无需重启 反向代理终于正常了。

        期间还遇到dnsmasq配置文件有误无法启动的问题 通过查看启动日志 修复了配置文件 这里不赘述。

你可能感兴趣的:(nginx,运维,服务器)