码迷,mamicode.com
首页 > 其他好文 > 详细

nginx动态解析的实现

时间:2018-08-27 00:17:12      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:mic   局限   指定   interval   第三方   分享图片   设置   blob   readme.md   

1 nginx 的upstream的解析,默认在nginx 启动后,缓存将永久,除非 -s reload。

如:
upstrem web_backend {
server web1:80;
}

在启动的时候web1的地址为1.1.1.1 (dns控制),后来架构调整 web1的地址变为2.2.2.2。然后这个时候nginx并不会自动感应到dns的变化,而是一直缓存着。 除非使用一下手段

  1. -s reload (但是是手动的或者脚本,在一定场合如 docker容器里面,是有局限性的,并且不至智能 )
  2. 使用第三方模块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;
}

特点

  1. 即使 指定的server不可被解析,nginx 也能被启动,不影响-t 检查只是有告警提示。
  2. 只依赖resolver指定的dns。

技术分享图片

介绍2: jdomain模块

特点:

  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-upstream-dynamic-servers 模块 是更好的。

nginx动态解析的实现

标签:mic   局限   指定   interval   第三方   分享图片   设置   blob   readme.md   

原文地址:http://blog.51cto.com/cuidehua/2164546

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!