nginx+lua+redis 实现灰度发布
2020-12-19 本文已影响0人
mafa1993
- 根据用户id或者ip进行判断,进行灰度发布,
- openresty的配置语法和nginx相同
- openresty start stop reload -c 配置文件
- openresty的效率要比nginx性能好一些
- lua_code_cache off; 关闭lua代码缓存,修改了lua file的代码,不用reload就会立即生效
- ubuntu下安装
- 安装时,如果原有nginx没停止,发生了端口占用,openresty启动不起来,不报错
location /test {
content_by_lua_file /etc/nginx/lua/graysgrays.lua;
}
# lua
-- ngx.header.content="text/plain";
ngx.header["Content-Type"] = "text/plain;charset=URF-8" -- 响应头Content-Type设置,不设置utf-8中文会出错
ngx.say("hello world");
ngx.exit(200); --状态码
灰度发布
--[[
测试输出hello world
ngx.header["Content-Type"] = "text/plain;charset=UTF-8"
ngx.say("hello world!")
ngx.exit(200) -- 状态码
]]
-- 引入redis客户端
local redis = require "resty.redis";
--ngx.log(ngx.ERR,redis);
--ngx.exit(200);
-- 获取客户端ip,需要灰度发布的
-- local client_ip = ngx.req.get_headers();
-- 也可以使用 ngx.var()直接获取nginx内置变量进行使用
local ip = ngx.var.remote_addr;
-- 记录日志 定义错误等级,内容
if ip == nil then
ngx.log(ngx.ERR,'ip---',ip)
end
--ngx.log(ngx.ERR,‘ip---’,local_ip)
-- 连接redis,查询数据
local cache = redis.new()
local ok,err = cache.connect(cache,'127.0.0.1',6379)
-- cache.auth 认证使用
if not ok then
-- 连接出错
ngx.log(ngx.ERR,'链接出错')
return;
end
local allow_ip = cache:get(ip) -- 是否存在这个key
if allow_ip == ip then
ngx.exec("@client2","a=2") -- 内部请求
-- ngx.exec("/abc","a=2")
-- 在rewrite assess content阶段可以使用
return
end
ngx.exec("@client1")
cache:close(); --关闭redis连接
# nginx
# 内部请求,到upstream
upstream client1 {
server 127.0.0.1:9501;
}
upstream client2 {
server 127.0.0.1:9502;
}
http {
server {
location @client1 {
proxy_pass http://client1;
}
location @client2 {
proxy_pass http://client2;
}
}
}