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的变化,而是一直缓存着。 除非使用一下手段

  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动态解析的实现的主要内容,如果未能解决你的问题,请参考以下文章

Nginx反向代理到花生壳动态域名失效问题解决

是否可以动态编译和执行 C# 代码片段?

nginx动态域名解析

Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)

Nginx动态解析域名方案?

前端开发必备!Emmet使用手册