网站首页 > 精选教程 正文
灰度发布也叫 A/B 测试,原理是一套系统在实现了负载均衡,全国节点都部署了系统之后,可以在新功能上线后,让一小部分用户先使用,从中收集使用信息来做对比和发现bug,及时调整,最终分发到全国的节点。
而在目前很多公司都会使用nginx作为前端服务器,为后端服务器提供负载技术。当我们需要对后端服务器进行升级时,我们只想让内部测试人员访问到新升级的服务器上,生产环境用户仍使用未升级的稳定环境。此时就可以使用nginx配合Lua模块来实现一定程度的条件控制。(本文中就是以IP作为限制)
安装环境
服务器 1: 192.168.1.214 (安装apache作为后端服务器)
服务器 2: 192.168.1.215(安装apache作为后端服务器)
服务器 3: 192.168.1.216 (安装nginx+lua 前端服务器)
1.安装nginx
准备工作
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
下载地址:http://nginx.org/en/download.html
本文中使用是nginx-1.12.2版本
cd /data
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar -zvxf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/data/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
2.安装Lua模块
2.1安装LuaJIT
下载地址:http://luajit.org/
wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz
tar zxvf LuaJIT-2.0.4.tar.gz
cd LuaJIT-2.0.4
make install PREFIX=/usr/local/luajit
echo "/usr/local/luajit/lib" > /etc/ld.so.conf.d/usr_local_luajit_lib.conf
ldconfig
export LUAJIT_LIB=/usr/local/luajit/lib
export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0
2.2安装ngx_devel_kit
下载地址https://github.com/simpl/ngx_devel_kit/tags
wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz
tar -zvxf v0.3.0.tar.gz
mv ngx_devel_kit-0.3.0/ ngx_devel_kit
2.3安装lua-nginx-module
下载地址:https://github.com/openresty/lua-nginx-module/tags
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.11rc3.tar.gz
tar -zvxg v0.10.11rc3.tar.gz
mv lua-nginx-module-0.10.11rc3/ lua-nginx-module
2.4 重新编译NGINX安装支持lua模块
cd /data/nginx-1.12.2
#具体模块路径安装时请修改
./configure --prefix=/data/nginx --with-http_stub_status_module --with-http_ssl_module --with-ld-opt="-Wl,-rpath,/usr/local/luajit/lib" --add-module=/data/ngx_devel_kit --add-module=/data/lua-nginx-module
make && make install
3.编写lua脚本实现根据请求来源IP地址,匹配对应的location
cd /data/nginx
mkdir lua
cd lua
vim ip_gray.lua
#######以下为lua脚本
local ip_config = ngx.shared.config;
ClienIP=ngx.req.get_headers()["X-Real-IP"]
if ClientIP == nil then
ClientIP = ngx.req.get_headers()["x_forworded_for"]
end
if ClientIP == nil then
ClientIP = ngx.var.remote_addr
end
for line in io.lines("/data/nginx/lua/ipList.conf") do
if not ip_config:get(line) then
ip_config:set(line, "0")
end
end
if ip_config:get(ClientIP) == "0" then
ngx.exec("@test_env")
else
ngx.exec("@product_env")
end
#########以上为lua脚本
创建存放测试IP地址文件
vim ipList.conf
192.168.1.13
192.168.1.14
4.修改Nginx配置nginx.conf
下图为主要配置
配置完毕后重启Nginx,可在ipList.conf中添加IP地址测试,添加后nginx无需reload,删除则需要reload。
lua_code_cache on | off 开启或关闭Lua代码缓存 生产环境一定要打开
猜你喜欢
- 2024-10-04 Java并发:分布式应用限流 Redis + Lua 实践
- 2024-10-04 OpenResty(一)Lua openresty lua脚本灰度发布
- 2024-10-04 Nginx与LUA(4) nginx lua优缺点
- 2024-10-04 高并发限流技术分析及实践 高并发限流方案
- 2024-10-04 Redis弱事务性与Lua脚本原子性分析
- 2024-10-04 像调试java一样来调试Redis lua redis调试工具
- 2024-10-04 Nginx与LUA(3) nginx与uwsgi详解
- 2024-10-04 企业级电商网站使用Nginx+Lua(OpenResty)实现高性能Web应用
- 2024-10-04 Lua 基础入门 lua语言零基础教程视频
- 2024-10-04 Nginx+Lua+MySQL/Redis实现高性能动态网页展现
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)