nginx動態解析的實現

1 nginx 的upstream的解析,默認在nginx 啓動後,緩存將永久,除非 -s reload。nginx

如:
upstrem web_backend {
server web1:80;
}git

在啓動的時候web1的地址爲1.1.1.1 (dns控制),後來架構調整 web1的地址變爲2.2.2.2。而後這個時候nginx並不會自動感應到dns的變化,而是一直緩存着。 除非使用一下手段github

  1. -s reload (可是是手動的或者腳本,在必定場合如 docker容器裏面,是有侷限性的,而且不至智能 )
  2. 使用第三方模塊ngx_upstream_jdomain 模塊 或者 nginx-upstream-dynamic-servers。可是這兩個模塊還有略有卻別的。 如下文章將對這兩個第三方模塊作詳細的介紹。

參考:
https://github.com/GUI/nginx-upstream-dynamic-servers/blob/master/README.mdweb

https://github.com/wdaike/ngx_upstream_jdomaindocker

介紹:
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;
}

特色架構

  1. 即便 指定的server不可被解析,nginx 也能被啓動,不影響-t 檢查只是有告警提示。
  2. 只依賴resolver指定的dns。

nginx動態解析的實現

介紹2: jdomain模塊dom

特色:ide

  1. 若是指定的server不可解析,nginx -t 檢查將不經過,nginx是不能被啓動的。
  2. 代表上不依賴http中 resolver指定的dns(即便沒有啓動也沒問題),可是nginx的解析工做須要依賴,沒有指定的話,會jdomian的動態工做特性將不生效,有可能會讀取本地的/etc/hosts文件,可是後面也一直不會動態更新。

upstream rpm {
#server 1ops-rpmbuild001.a.pa.com:8001 resolve;
jdomain ops-rpmbuild001.a.pa.com port=8001 interval=5;
}

nginx動態解析的實現

(在使用jdomain的經驗當中,若是解析中來的後端有多個,而請求恰好落地的那個後端響應不通,則nginx會自動輪詢到下一個地址,則此處$reqeust_time,$upstream_addr 地址會有兩個用逗號隔開,固然請求時間會比較長了)

綜合上述,其實使用 nginx-upstream-dynamic-servers 模塊 是更好的。

相關文章
相關標籤/搜索