nginx动态解析的实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx动态解析的实现相关的知识,希望对你有一定的参考价值。
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的变化,而是一直缓存着。 除非使用一下手段
- -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;
jdomain ops-rpmbuild001.a.pa.com port=8001 interval=5;
}
综合上述,其实使用 nginx-upstream-dynamic-servers 模块 是更好的。
以上是关于nginx动态解析的实现的主要内容,如果未能解决你的问题,请参考以下文章