nginx根据ip进行灰度发布

介绍

之前公司做的都是蓝绿发布,但是有的开发想着又能实现根据来源ip做灰度,又能实现蓝绿发布,在这里我写了下简单的实现方式。

解决办法

nginx 负载均衡器判断客户端IP地址,如果是办公室IP,则反向代理到灰度环境;如果不是,则反向代理到生产环境。

下面是一个域名多项目的事例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

server {
listen 80;
server_name sy.test.com;


add_header X-Cache $upstream_cache_status;
charset utf-8;
access_log /data/nginxlog/sy.test.com.log;
set $web_backend tomcat-test-scm-v1;
if ($remote_addr ~ "x.x.x.x") {
set $web_backend tomcat-test-scm-v2;
}
if ($remote_addr ~ "x.x.x.x") {
set $web_backend tomcat-test-scm-v2;
}
set $hd_backend live-v1;
if ($remote_addr ~ "x.x.x.x") {
set $hd_backend live-v2;
}
if ($remote_addr ~ "x.x.x.x") {
set $hd_backend live-v2;
}
location ~ ^/live {
proxy_redirect off;
proxy_set_header Host $host;
proxy_pass http://$hd_backend;
}

location ~ / {
proxy_redirect off;
proxy_pass http://$web_backend;
}
}

实现效果,办公网访问的是灰度的v2版本,当测试通过,只需将v1版本替换成v2。

参考链接

Donate