首先看看openresty指令执行顺序 所以我们可以在 rewrite_by_lua* 阶段利用lua开发nginx模块动态路由控制,采用请求计数器,若流量在流控范围内,走新系统,否则走老系统。大致流程图如下: 3.实现代码 灰度配置文件 -- Copyright (C) www.bytearch.com (iyw) local _M = { _VERSION = "0.0.2" } -- 灰度级别 0...
它是一个 Lua table,可以用来存储基于请求的 Lua 数据,且生存周期与当前请求相同。我们来看下官方文档中的这个示例: location /test { rewrite_by_lua_block { ngx.ctx.foo = 76 } access_by_lua_block { ngx.ctx.foo = ngx.ctx.foo + 3 } content_by_lua_block { ngx.say(ngx.ctx.foo) } } 1...
rewrite ^ /bar redirect; 等价于 ngx.redirect("https://www.baidu.com", 302) rewrite ^ /bar permanent; 等价于 ngx.redirect("https://www.baidu.com", 301) ---nginx.conf配置文件 location /lua_rewrite_1 { rewrite_by_lua_block { if ngx.req.get_uri_args()["jump"] == "1" then ret...
# rewrite_by_lua不止能跳转到外部,也可以内部跳转 location /jump_here { # 内容处理,在配置中写代码 content_by_lua_block { ngx.say("hello, jump_here","\t",ngx.var.remote_addr) } # 用于修改应答body的内容 body_filter_by_lua_block { local chunk=ngx.arg[1] ngx.arg[1]=chunk:gsub("h...
rewrite_by_lua_block{ ngx.log(ngx.ALERT,"(location | rewrite_by | outside)") ngx.var.my_var="outside" ngx.ctx.my_var="outside" ngx.req.set_uri("/final",true) } } location/inside{ access_by_lua_block{ ngx.log(ngx.ALERT,"(location | access_by | inside)") ...
OpenResty 是一个基于 Nginx 的 Web 平台,内部嵌入 LuaJIT 虚拟机运行 Lua 脚本。使用 Lua 编程语言对 Nginx 核心以及各种 Nginx C 模块进行脚本编程。 如上图: 每接到一个客户端请求,通过抢占锁,由一个 worker 进程来跟进处理。 worker 内部会创建一个 lua 协程,绑定请求,也就是说一个请求对应一个 lua 协...
跟全局变量,模块变量相对,我们这里姑且把*_by_lua*里定义的变量称为本地变量。本地变量仅在当前阶段有效,如果需要跨阶段使用,需要借助ngx.ctx或者附加到模块变量里。 这里我们使用了ngx.ctx表在三个不同的阶段来传递使用变量foo: location /test { rewrite_by_lua_block { ...
使用rewrite_by_lua_block(可以对照上文中的处理流程图) 使用cjson来解析body,判断uids中的数量,这段都是lua代码,注意lua代码和nginx配置的语法是不一样的,lua中获取nginx的变量使用ngx.var.upstream_name 后端代码这里也贴一下,使用golang编写,用到了echo框架 ...
跟全局变量,模块变量相对,我们这里姑且把*_by_lua*里定义的变量称为本地变量。本地变量仅在当前阶段有效,如果需要跨阶段使用,需要借助ngx.ctx或者附加到模块变量里。 这里我们使用了ngx.ctx表在三个不同的阶段来传递使用变量foo: location /test { rewrite_by_lua_block { ...
使用rewrite_by_lua_block(可以对照上文中的处理流程图) 使用cjson来解析body,判断uids中的数量,这段都是lua代码,注意lua代码和nginx配置的语法是不一样的,lua中获取nginx的变量使用ngx.var.upstream_name 后端代码这里也贴一下,使用golang编写,用到了echo框架 ...