在 nginx 反向代理中使用动态域名解析ip过期问题
Posted on: 2021-08-25, Last modified: 2021-08-25, View: 1400
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服务器。