在 nginx 反向代理中使用动态域名解析ip过期问题
Posted on: 2021-08-25, Last modified: 2021-08-25, View: 1400

nginx中配置了一个反向代理,指向一台使用动态域名的服务器,使用一段时间后发现总是在过一段时间后发生500错误,查询nginx的错误日志发现是访问时指向旧的过期的ip地址,其实服务器端的动态ip已经更换了,一番搜索后得出如下解决方案:


nginx 中配置的反向代理:

 

location / {
         proxy_pass http://d.example.com:8080;
}

其中 d.example.com 是动态解析的域名. 用了几天之后发现一个问题, 动态域名更改 IP 后, nginx 还是发送到旧的 IP. 从 error 日志看到错误. 查了下官文的文档, 原来是 nginx 启动加载配置文件时, 会把域名解析成 IP, 也就是域名只被解析一次. 网上搜了一下有网友指出用变量代替直接写域名的方法, 经测试方法可行.

resolver 8.8.8.8;

server {
    location / {
        set $servers http://d.example.com:8080;
        proxy_pass http://$servers;
    }
}

如上,通过使用变量($servers)的方式可以强制 nginx 遵守域名解析结果的 TTL,过期后自动重新解析。不过这种写法有个副作用,如此配置后 nginx 不会自动使用系统 /etc/resolve.conf 的配置,此时必须使用 resolver 指令手动给它指定一个 DNS 服务器。

  其中 8.8.8.8是谷歌的开源免费DNS,国内的有114.114.114.114.如果是内网域名,需要制定内网的DNS服务器。

 

Go
Friend Links:
Sonft