nginx动态解析的实现

本文主要介绍了Nginx upstream的解析机制,默认启动后缓存永久,除非使用 -s reload。还详细介绍了两个第三方模块ngx_upstream_jdomain和nginx - upstream - dynamic - servers,对比了它们的特点,如指定server不可解析时的表现、对dns的依赖等,最后认为nginx - upstream - dynamic - servers模块更好。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

nginx动态解析的实现

介绍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动态解析的实现

(在使用jdomain的经验当中,如果解析中来的后端有多个,而请求刚好落地的那个后端响应不通,则nginx会自动轮询到下一个地址,则此处$reqeust_time,$upstream_addr 地址会有两个用逗号隔开,当然请求时间会比较长了)

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

转载于:https://blog.51cto.com/cuidehua/2164546

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值