代理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。
评论