lua-resty-ctxdump

存储并应用旧的 ngx.ctx,避免在 Nginx 内部重定向后被销毁。

$ opm get tokers/lua-resty-ctxdump

名称

lua-resty-ctxdump - 存储和应用 ngx.ctx,避免在 Nginx 内部重定向后被销毁。

!构建状态

状态

在大多数情况下可能已准备好投入生产,但尚未在实际环境中得到验证。请查看问题列表,如果您有任何问题,请告诉我。

概述

    location /t1 {
        set $ctx_ref = "";
        content_by_lua_block {
             local ctxdump = require "resty.ctxdump"
             ngx.ctx = {
                 Date = "Wed May  3 15:18:04 CST 2017",
                 Site = "unknown"
            }
            ngx.var.ctx_ref = ctxdump.stash_ngx_ctx()
            ngx.exec("/t2")
        }
    }
    
    location /t2 {
        internal;
        content_by_lua_block {
             local ctxdump = require "resty.ctxdump"
             ngx.ctx = {
                 Date = "Wed May  3 15:18:04 CST 2017",
                 Site = "unknown"
            }
            ngx.ctx = ctxdump.apply_ngx_ctx(ngx.var.ctx_ref)
            ngx.say("Date: " .. ngx.ctx["Date"] .. " Site: " .. ngx.ctx["Site"])
        }
    }
    

方法

stash_ngx_ctx

语法: ref = stash_ngx_ctx() <br> 阶段: init_worker_by_lua\, set_by_lua\, rewrite_by_lua\, access_by_lua\*, content_by_lua\, header_filter_by_lua\, body_filter_by_lua\, log_by_lua\, ngx.timer.\, balancer_by_lua\

引用 ngx.ctx,返回一个锚点(由 lua-resty-ctxdump 维持的新引用)。

注意:stash_ngx_ctxapply_ngx_ctx 必须成对调用,否则会导致内存泄漏!请参阅 apply_ngx_ctx.

apply_ngx_ctx

语法: old_ngx_ctx = apply_ngx_ctx(ref) <br> 阶段: init_worker_by_lua\, set_by_lua\, rewrite_by_lua\, access_by_lua\*, content_by_lua\, header_filter_by_lua\, body_filter_by_lua\, log_by_lua\, ngx.timer.\, balancer_by_lua\

使用从 stash_ngx_ctx 返回的锚点获取旧的 ngx.ctx。之后,锚点将失效。

注意:stash_ngx_ctxapply_ngx_ctx 必须成对调用,否则会导致内存泄漏!请参阅 stash_ngx_ctx.

作者

Alex Zhang(张超) zchao1995@gmail.com, UPYUN Inc.

版权和许可

该包本身是在 2-clause BSD 许可下授权的。

版权所有 (c) 2017,Alex Zhang。

本模块根据 BSD 许可条款授权。

在满足以下条件的情况下,允许以源代码和二进制形式重新分发和使用本软件,无论是否修改:

  • 源代码的重新分发必须保留上述版权声明、此条件列表和以下免责声明。

  • 二进制形式的重新分发必须在随分发提供的文档和/或其他材料中复制上述版权声明、此条件列表和以下免责声明。

本软件由版权持有人和贡献者“按现状”提供,任何明示或暗示的担保,包括但不限于对适销性和特定目的适用性的暗示担保均被排除在外。在任何情况下,版权持有人或贡献者均不对因使用本软件而引起的任何直接的、间接的、附带的、特殊的、惩罚性的或后果性的损害(包括但不限于替代商品或服务的采购;使用、数据或利润损失;或业务中断)负责,无论其原因如何,以及在任何责任理论下,无论是在合同、严格责任或侵权行为(包括疏忽或其他原因)的情况下,即使已告知可能发生此类损害。

作者

Alex Zhang(张超) zchao1995@gmail.com,UPYUN Inc.

许可证

2bsd

版本