之前公司做的都是蓝绿发布,灰度也就是基于header,cookie,url,query等等的,但是有的开发想着又能实现根据来源ip做灰度,又能实现蓝绿发布,在这里我写了下简单的实现方式。
nginx 负载均衡器判断客户端IP地址,如果是办公室IP,则反向代理到灰度环境;如果不是,则反向代理到生产环境。
下面是一个域名多项目的事例:
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。