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变量后不能添加路径,识别不了。

posted @ 2021-11-09 15:02  Loooog  阅读(273)  评论(0)    收藏  举报