如何使用Nginx实现灰度发布

  介绍

这篇文章主要介绍如何使用Nginx实现灰度发布,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

灰度发布是指在黑与白之间,<强>能够平滑过渡的一种发布方式.AB测试就是一种灰度发布方式强,让一部分用户继续用,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。

灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现,调整问题,以保证其影响度。

灰度发布常见一般有三种方式:

<李>

Nginx + LUA方式

<李>

根据饼干实现灰度发布

<李>

根据来路IP实现灰度发布

本文主要将讲解根据饼干和来路IP这两种方式实现简单的灰度发布,Nginx + LUA这种方式涉及内容太多就不再本文展开了。

A/B测试流程

如何使用Nginx实现灰度发布

如何使用Nginx实现灰度发布

<强> Nginx根据饼干实现灰度发布

根据饼干查询饼干键为版本的值,如果该Cookie值为V1则转发到hilinux_01,为V2则转发到hilinux_02.Cookie值都不匹配的情况下默认走hilinux_01所对应的服务器。

两台服务器分别定义为:

<李>

hilinux_01 李192.168.1.100:8080

<李>

hilinux_02 李192.168.1.200:8080

用如果指令实现

upstream  hilinux_01  {   server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60;   }      upstream  hilinux_02  {   server 才能;192.168.1.200:8080  max_fails=1, fail_timeout=60;   }      upstream  default  {   server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60;   }      server  {   ,listen  80;   ,server_name  www.hi-linux.com;   ,access_log 日志/www.hi-linux.com.log 主要;      # match 饼干   ,set  group 美元;“default";   if 才能;(http_cookie 美元;~ *,“版本=V1") {   ,,,set  group 美元;hilinux_01;   ,,}      if 才能;(http_cookie 美元;~ *,“版本=V2") {   ,,,set  group 美元;hilinux_02;   ,,}      ,位置/,{,,,,,,,,,,,   proxy_pass 才能;http://$组;   ,,proxy_set_header  Host ,,,,,,主机美元;   ,,proxy_set_header  X-Real-IP ,,, remote_addr美元;   ,,proxy_set_header  X-Forwarded-For  proxy_add_x_forwarded_for美元;   index 才能index.html 你可以;   ,}   以前,}

<强>用地图指令实现

在Nginx里面配置一个映射,<代码> COOKIE_version美元可以解析出饼干里面字的版本段>

如果一个版本为V1的用户来访问,美元集团就等于hilinux_01。在服务器里面使用就会代理到http://hilinux_01上.version为V2的用户来访问,美元集团就等于hilinux_02。在服务器里面使用就会代理到http://hilinux_02上.Cookie值都不匹配的情况下默认走hilinux_01所对应的服务器。

upstream  hilinux_01  {   server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60;   }      upstream  hilinux_02  {   server 才能;192.168.1.200:8080  max_fails=1, fail_timeout=60;   }      upstream  default  {   server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60;   }      map  COOKIE_version 美元;group 美元;{   ~ * V1,美元hilinux_01;   ~ * V2,美元hilinux_02;   default 违约;   }      server  {   ,listen  80;   ,server_name  www.hi-linux.com;   ,access_log 日志/www.hi-linux.com.log 主要;      ,位置/,{,,,,,,,,,,,   proxy_pass 才能;http://$组;   ,,proxy_set_header  Host ,,,,,,主机美元;   ,,proxy_set_header  X-Real-IP ,,, remote_addr美元;   ,,proxy_set_header  X-Forwarded-For  proxy_add_x_forwarded_for美元;   index 才能index.html 你可以;   ,}   以前,}

<强> Nginx根据来路IP实现灰度发布

如果是内部IP, <强>则反向代理到hilinux_02(预发布环境);强如果不是则反向代理到hilinux_01(生产环境)。

upstream  hilinux_01  {   server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60;   }      upstream  hilinux_02  {   server 才能;192.168.1.200:8080  max_fails=1, fail_timeout=60;   }      upstream  default  {   server 才能;192.168.1.100:8080  max_fails=1, fail_timeout=60;   }      server  {   ,listen  80;   ,server_name  www.hi-linux.com;   ,access_log 日志/www.hi-linux.com.log 主要;      ,set  group 美元;违约;   ,if  (remote_addr 美元;~,“211.118.119.11"), {   ,,set  group 美元;hilinux_02;   ,}      位置/,{,,,,,,,,,,,   proxy_pass 才能;http://$组;   ,,proxy_set_header  Host ,,,,,,主机美元;   ,,proxy_set_header  X-Real-IP ,,, remote_addr美元;   ,,proxy_set_header  X-Forwarded-For  proxy_add_x_forwarded_for美元;   index 才能index.html 你可以;   ,}   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何使用Nginx实现灰度发布