nginx動態解析的實現
阿新 • • 發佈:2018-08-27
永久 .... 分享 局限性 ges 不生效 mar ... 動態更新 1 nginx 的upstream的解析,默認在nginx 啟動後,緩存將永久,除非 -s reload。
jdomain ops-rpmbuild001.a.pa.com port=8001 interval=5;
}
如:
upstrem web_backend {
server web1:80;
}
在啟動的時候web1的地址為1.1.1.1 (dns控制),後來架構調整 web1的地址變為2.2.2.2。然後這個時候nginx並不會自動感應到dns的變化,而是一直緩存著。 除非使用一下手段
- -s reload (但是是手動的或者腳本,在一定場合如 docker容器裏面,是有局限性的,並且不至智能 )
- 使用第三方模塊ngx_upstream_jdomain 模塊 或者 nginx-upstream-dynamic-servers。但是這兩個模塊還有略有卻別的。 以下文章將對這兩個第三方模塊做詳細的介紹。
參考:
https://github.com/GUI/nginx-upstream-dynamic-servers/blob/master/README.md
https://github.com/wdaike/ngx_upstream_jdomain
介紹:
nginx-upstream-dynamic-servers 模塊
使用方法: (resolver指令和 upstream要配套使用,否則報錯,動態緩存時間vaild可設置,依賴知道那個的域名地址)
http { ... resolver 10.59.72.3 valid=30s; .... } upstream rpm { zone upstream_dynamic 64k; server ops-rpmbuild001.a.pa.com:8001 resolve; }
特點
- 即使 指定的server不可被解析,nginx 也能被啟動,不影響-t 檢查只是有告警提示。
- 只依賴resolver指定的dns。
介紹2: jdomain模塊
特點:
- 如果指定的server不可解析,nginx -t 檢查將不通過,nginx是不能被啟動的。
- 表明上不依賴http中 resolver指定的dns(即使沒有啟動也沒問題),但是nginx的解析工作需要依賴,沒有指定的話,會jdomian的動態工作特性將不生效,有可能會讀取本地的/etc/hosts文件,但是後面也一直不會動態更新。
upstream rpm {
#server 1ops-rpmbuild001.a.pa.com:8001 resolve;
}
綜合上述,其實使用 nginx-upstream-dynamic-servers 模塊 是更好的。
nginx動態解析的實現