代理http

location / {
    resolver 8.8.8.8 valid=60s ipv6=off;
    set $backend "http://xxxx.com";

    proxy_pass $backend:8080; 
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP       $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_protocol_addr;
}

其中的resolver是使用指定的DNS,valid是缓存有效期
set $backend 就是把$backend这个变量赋值赋值为后面的url

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

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

代理stream

stream {
    # 指定 DNS 解析器
    resolver 8.8.8.8 valid=60s ipv6=off;

    server {
       listen 80;

       # 使用变量设置后端服务器地址
       set $backend "xxxx.com:8080";

       # 代理传递到动态解析的后端
       proxy_pass $backend;
    }
}

解决的问题

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