jrgf 发表于 2018-11-13 07:50:37

nginx动态解析的实现

  1 nginx 的upstream的解析,默认在nginx 启动后,缓存将永久,除非 -s>  如:
  upstrem web_backend {
  server web1:80;
  }
  在启动的时候web1的地址为1.1.1.1 (dns控制),后来架构调整 web1的地址变为2.2.2.2。然后这个时候nginx并不会自动感应到dns的变化,而是一直缓存着。 除非使用一下手段


[*]-s>
[*]使用第三方模块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;
  jdomain ops-rpmbuild001.a.pa.com port=8001 interval=5;
  }

  综合上述,其实使用 nginx-upstream-dynamic-servers 模块 是更好的。


页: [1]
查看完整版本: nginx动态解析的实现