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

384次阅读
没有评论

共计 1466 个字符,预计需要花费 4 分钟才能阅读完成。

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

背景

当时该模块服务为物理机,需要迁移到内部云上,该业务是在nginx上通过proxy_pass代理了该模块接口服务,类似如下

location /authxxxx/ {
    proxy_pass http://192.168.44.56:18080/;
}

迁移挺简单的,将地址改为私云新地址即可,后面nginx -s reload就好了,但甲方baba说不确定后续还会不会迁移,因为他们也是第一次上私云,循序渐进安排项目迁移。。。。一听到可能多次,就裂开,因为这种变更得去客户现场操作,所以得想个方式动态变更,剧本已经想好:

  • 第一次迁移:物理机->云
    • 云上环境部署
    • 前端nginx切流
  • 第n次迁移:云->云
    • 利用私云上快照快速克隆创建
    • 利用reslover+域名代理,后面切换dns解析即可

以后对于甲方集群机器挪动得变更,博主这里要做得事情就会轻松很多,因为私云上得甲方操作,只有服务器上得操作才需要我

nginx reslover

reslover指令语法

Syntax:	resolver address ... [valid=time] [ipv6=on|off];
Default:	—
Context:	http, server, location

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指令语法

Syntax:	resolver_timeout time;
Default:	
resolver_timeout 30s;
Context:	http, server, location

该指令是配置dns解析超时时间

reslover配置样例

此处需要提前准备内网dns解析服务,此处博主也不需要建,直接申请使用私云内网域解析域名服务即可。读者则可以使用dnsmasq或bind9搭建dns服务,可以参考:https://www.xadocker.cn/archives/1539.html

server {
    # 略
    resolver 10.xxx.xx.x 600s ipv6=off;
    resolver_timeout 5s;
    location /authxxxx/ {
        proxy_pass       http://sva-xxxproject-clusterxx.aaabbb.com:18080/;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        proxy_buffer_size 1600k;
        proxy_buffers 4 3200k;
    }
}

正文完
 1
xadocker
版权声明:本站原创文章,由 xadocker 2020-03-22发表,共计1466字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)