一. 简述:
在 OpenResty 的体系中,可以通过共享内存的方式完成不同工作进程的数据共享,可以通过 Lua 模块方式完成单个进程内不同请求的数据共享。ngx.ctx 表就是为了解决这类问题而设计的。
二. 关于ngx.ctx
ngx.ctx 是一个表,所以我们可以对他添加、修改。它用来存储基于请求的 Lua 环境数据,其生存周期与当前请求相同 (类似 Nginx 变量)。它有一个最重要的特性:单个请求内的 rewrite (重写),access (访问),和 content (内容) 等各处理阶段是保持一致的。
每个请求,包括子请求,都有一份自己的 ngx.ctx 表,请求结束,ngx.ctx表会被销毁。
eg:
location /sub {
content_by_lua_block {
ngx.say("sub pre: ", ngx.ctx.blah)
ngx.ctx.blah = 32
ngx.say("sub post: ", ngx.ctx.blah)
}
}
location /main {
content_by_lua_block {
ngx.ctx.blah = 73
ngx.say("main pre: ", ngx.ctx.blah)
local res = ngx.location.capture("/sub")
ngx.print(res.body)
ngx.say("main post: ", ngx.ctx.blah)
}
}
-------- output
-- 访问 get /main
main pre: 73
sub pre: nil
sub post: 32
main post: 73
任意数据值,包括 Lua 闭包与嵌套表,都可以被插入ngx.ctx表中, 也可以将 n

最低0.47元/天 解锁文章
786

被折叠的 条评论
为什么被折叠?



