Fork me on GitHub

Nginx之使用Nginx实现灰度发布

使用Nginx实现灰度发布

灰度发布概述

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
灰度发布常见一般有三种方式:

  • Nginx+LUA方式
  • 根据Cookie实现灰度发布
  • 根据来路IP实现灰度发布

本文主要将讲解根据Cookie和来路IP这两种方式实现简单的灰度发布。

部署实践

环境说明

1
2
3
4
5
6
7
8
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
# uname -r
3.10.0-693.el7.x86_64
# uname -m
x86_64
# nginx -v
nginx version: nginx/1.12.2

基于IP地址的灰度发布实现

根据IP地址反向代理到不同的后端server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
upstream prod {
server 192.168.1.10;
server 192.168.1.11;
}
upstream pre-prod {
server 192.168.1.100;
}
server {
listen 80;
access_log /var/log/nginx/access.log main;
set $web_backend prod;
if ($remote_addr ~ "123.123.123.123") {
set $web_backend pre-prod;
}
location / {
proxy_pass http://$web_backend;
include proxy.conf;
}
}

根据IP地址设置不同的网站根目录

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
access_log /var/log/nginx/access.log main;
set $rootdir "/var/www/html";
if ($remote_addr ~ "123.123.123.123") {
set $rootdir "/var/www/test";
}
location / {
root $rootdir;
}
}

set 命令依赖rewrite模块

利用geoip做基于地理位置的灰度发布
参考:http://www.mamicode.com/info-detail-1477149.html

基于cookie的灰度发布实现

if指令实现
map指令实现
参考:https://www.cnblogs.com/weifeng1463/p/7353710.html

参考资料

https://www.cnblogs.com/weifeng1463/p/7353710.html
https://www.cnblogs.com/zhangyin6985/p/6064350.html

======================================================
希望各位朋友支持一下

本文作者:dongsheng
本文地址https://mds1455975151.github.io/archives/8bece5b5.html
版权声明:转载请注明出处!

坚持技术分享,您的支持将鼓励我继续创作!