Nginx中的reslover如何实现动态代理

背景
当时该模块服务为物理机,需要迁移到内部云上,该业务是在nginx上通过proxy_pass代理了该模块接口服务,类似如下
1 | location /authxxxx/ { |
迁移挺简单的,将地址改为私云新地址即可,后面nginx -s reload就好了,但甲方baba说不确定后续还会不会迁移,因为他们也是第一次上私云,循序渐进安排项目迁移。。。。一听到可能多次,就裂开,因为这种变更得去客户现场操作,所以得想个方式动态变更,剧本已经想好:
- 第一次迁移:物理机->云
- 云上环境部署
- 前端nginx切流
- 第n次迁移:云->云
- 利用私云上快照快速克隆创建
- 利用reslover+域名代理,后面切换dns解析即可
以后对于甲方集群机器挪动得变更,博主这里要做得事情就会轻松很多,因为私云上得甲方操作,只有服务器上得操作才需要我
nginx reslover
reslover指令语法
1 | Syntax:resolver address ... [valid=time] [ipv6=onoff]; |
The address can be specified as a domain name or IP address, with an optional port (1.3.1, 1.2.2). If port is not specified, the port 53 is used. Name servers are queried in a round-robin fashion
该指令用于指定nginx得dns服务器:
- address:可以用ip或域名(这个域名则用本地配置得dns进行解析获得最终dns服务器地址)。
- valid:配置nginx缓存dns记录过期时间,不配置则用源记录得ttl,否则覆盖源纪录ttl
- ipv6:配置解析域名ipv6地址,nginx默认会从dns服务器解析域名ipv4和ipv6,如果不需要ipv6则off关闭
resolver_timeout指令语法
1 | Syntax:resolver_timeout time; |
该指令是配置dns解析超时时间
reslover配置样例
此处需要提前准备内网dns解析服务,此处博主也不需要建,直接申请使用私云内网域解析域名服务即可。读者则可以使用dnsmasq或bind9搭建dns服务,可以参考:https://www.xadocker.cn/archives/1539.html
1 | server { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 云野生SRE回忆录!