sun博客

记录点滴!

最近用 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"

解决方案

  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;
}

有关resolver 的注意事项:

https://cloud.tencent.com/developer/article/1888426

发表评论

邮箱地址不会被公开。 必填项已用*标注