最近用 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"
解决方案
- 使用
set
命令用变量定义要反向代理的域名,在对proxy_pass
进行转发的时候域名调用变量。 - 同时可以配置可靠的
valid
参数来自定义缓存有效时间间隔地对变量中的域名进行解析。 - 但这种方式必须要配置
resolver DNS服务器IP
用于对定义的域名进行解析,这里使用114.114.114.114
。
配置示例如下:
location / {
resolver 114.114.114.114 valid=60s;
set $backend "http://wco.cc:80";
proxy_pass $backend;
}
有关resolver 的注意事项: