浏览 1.7k
开源版nginx在四七层代理中 proxy_pass 可以用域名,如 proxy_pass http://域名:端口 ,
但是该域名只有在nginx加载的时候解析一次。如果域名解析的ip发生变化时,nginx还是会把real server指向原来的ip。可能会导致服务不可用。仓促的解决办法:重新 reload nginx。
四层七层中都可用。
七层的解决方法如下:(四层类似,也要用变量,我用了map可以实现)
server {
listen 8080;
server_name localhost;
ssl_prefer_server_ciphers on;
#配置域名解析 valid:DNS缓存时间,也可以不指定,缓存时间会默认根据域名的TTL时间 ipv6:on或off,指定该域名解析为ipv6地址。
resolver 202.102.134.68 114.114.114.114 valid=30 ipv6=off;
#指定解析域名时,DNS服务器的超时时间,也可以不指定
resolver_timeout 30s;
#设置变量,在使用resolver之后,必须使用set设置变量来代替域名,否则会报错
set $true_url "local.wuanwanghao.top";
location / {
proxy_pass http://$true_url:30550;
}
}使用resolver后域名的ip变化后,nginx也会把流量转发到新的ip上,问题得到解决。
查看nginx的官方文档中的resolver内容,都提示了“The parameter is available as part of our commercial subscription.”感觉是要收费。所以想确认下免费版能否在生产使用这个功能?那位大佬清楚,谢谢!
https://nginx.org/en/docs/http/ngx_http_core_module.html#resolver 【七层】官方文档
https://nginx.org/en/docs/stream/ngx_stream_upstream_module.html#resolver 【四层】官方文档

按点赞数排序
按时间排序
sticky模块只能在linux下吧,win下没有。tomcat好像有个session复制吧,或者可以用共享session。
没办法完全不受影响的,因为mirror是子请求,当子请求未结束时,主请求消耗的内存至少是无法释放的。你可以尝试在/mirror里,把超时时间大幅度调低,包括connect/read/send,再压下看看。
微信公众号
加入微信群