Nginx 反向代理动态域名,解决 IP 地址改变后无法访问

故障描述

最近用 Nginx 反向代理的几个网站经常出打不开,报 502 或 504 错误,重启 Nginx 后马上就好了。

错误代码一般下面两种:

502 Bad Gateway

504 Gateway Time-out

分析过程

分析 Nginx 错误日志发现错误原因是:

Nginx 反向代理的动态域名 IP 随时会变化(宽带重新拨号),但 IP 改变后 Nginx 的反向代理还是用的缓存的旧 IP。

错误日志部分如下:

2019/04/07 20:19:55 [error] 7715#7715: *15167 connect() failed (111: Connection refused) while connecting to upstream, client: 222.173.251.10, server: www.weiku.co, request: "GET / HTTP/1.1", upstream: "http://27.195.21.14:80/", host: "www.weiku.co"

上面的错误日志upstream: "http://27.195.21.14:80/"中的ip其实已经是旧的了。

解决方案

  1. 使用 set 命令用变量定义要反向代理的域名,在对proxy_pass进行转发的时候域名调用变量。
  2. 同时可以配置可靠的valid参数来自定义缓存有效时间间隔地对变量中的域名进行解析。
  3. 但这种方式必须要配置resolver DNS服务器IP用于对定义的域名进行解析,微酷这里使用114.114.114.114

配置示例如下:

location / {
    resolver 114.114.114.114 valid=60s;
    set $backend "http://wco.cc:80";
    proxy_pass $backend;
}

参考资料

最后修改:2019 年 04 月 07 日 10 : 11 PM
如果觉得我的文章对你有用,请随意赞赏

2 条评论

  1. 空心菜

    可以的,我也是一模一样 的问题,困扰了我几个月,今天终于解决了。

    1. ifu25
      @空心菜

      解决了就好。

发表评论