nginx灰度测试
因业务需要做灰度发布测试。开始考虑通过IP来做判断,分发不同的后端,但是由于请求IP不固定,所以用cookie来做。
逻辑如下:

在nginx里配置map或if,可以实现此需求。
1、配置upstream,分发到不同的后端
upstream test01 {
server x.x.x.38:8280 max_fails=1 fail_timeout=5;
ip_hash;
}
upstream test {
server x.x.x.71:8080 max_fails=1 fail_timeout=5;
ip_hash;
}
2、配置map
map指令是由ngx_http_map_module模块提供的,一般默认都会安装;map的主要作用是创建自定义变量,做变量的映射,变量的值取决于第一个参数指定的一个或多个源变量的值。

如上面的配置,$COOKIE_greytest映射第一列~*G1$、default等,也就是第一个参数,$upstream_x 映射第二列test01、test等,也就是第二个参数,当$COOKIE_greytest值为G1$时,$upstream_x值就是test01,以此类推。如果都没匹配到,那就是default的值,如果没有定义default,那就是空。
这里配置cookie_name为greytest,值为G1结尾。通过cookie_NAME对cookie值的获取,NAME为cookie的名称,通过这种方式可以获取到该cookie对应的值,然后通过cookie的值去定义变量。
配置完成后,可以使用goole浏览器进行测试。这里使用一个编辑cookie的chome插件,Cookie-Editor,可以直接修改cookie:


3、使用if方法配置
if方法,是通过set去给变量赋值,配置如下:
location /app {
#match cookie
set $upstream_x "test";
if ($cookie_greytest ~* "G1"){
set $group test01;
}
proxy_pass http://$upstream_x;
这里的代理转发是/app路径问题。原先使用端口代理到/app路径,upstream变量后不能添加路径,识别不了。

浙公网安备 33010602011771号