问题分析

Nginx反向代理的时候反向代理了一个DDNS域名,在反向代理设置开始的时候一切正常,在DDNS过期换ip后,nginx端出现502 Bad Gateway或者出现504 Gateway Time-out了。其实是因为nginx的缓存问题,默认是不过期的,直到你重启nginx,否则ip永远是那个ip。

解决办法

定位到nginx的反向代理的代码部分,然后进行如下修改。

location / 
{ 
resolver 8.8.8.8 valid=60s ipv6=off; 
set $backend "https://www.sakurabakiyoka.com";
proxy_pass $backend;
}

其中的resolver是使用指定的DNS,valid是缓存有效期

set $backend 就是把$backend这个变量赋值,赋值为后面的url

proxy_pass $backend就是读取变量并且反代。由于是变量,nginx会按照指定间隔来重新解析域名,而不是使用缓存来反向代理,这样就可以解决IP变动的问题了。

ipv6=off是针对只有IPV4的域名的,如果你的反向代理域名只有IPV4,但是这里没有指定ipv6=off,nginx就会请求IPV4和IPV6地址并且随机选择一个,如果恰巧选择了IPV6地址那么就无法进行正常访问了。


你是否也像清风拂过花儿一样与我相遇呢?