【问题标题】:Passing variable between blocks in Openresty/Lua with ngx.ctx使用 ngx.ctx 在 Openresty/Lua 中的块之间传递变量
【发布时间】:2020-02-09 09:40:12
【问题描述】:

试图在两个 lua 块之间传递一个变量。据说,这应该适用于 ngx.ctx,如下所示:

header_filter_by_lua_block  {
ngx.ctx.myvar = ngx.header["X-fetch"];
}

access_by_lua_block  {
ngx.header["X-send"] = ngx.ctx.myvar;
}

但事实并非如此。怎么了?

附:在一个块中测试两者确实有效(基本上是复制现有的标头,但这只是为了说明)

header_filter_by_lua_block  {
ngx.ctx.myvar = ngx.header["X-fetch"];
ngx.header["X-send"] = ngx.ctx.myvar;
}

【问题讨论】:

    标签: nginx lua http-headers openresty


    【解决方案1】:

    那是因为access_by_lua_blockheader_filter_by_lua_block 之前运行。

    看看https://openresty-reference.readthedocs.io/en/latest/Directives/

    【讨论】:

    • 确实,显然我期待它只是代码的顺序......有机会让它运行吗?
    • (尝试在log_by_lua_block 中这样做,但它不起作用)
    • 你的意思是让access_by_lua_block header_filter_by_lua_block 之后运行?不,您不能更改指令执行的顺序。为什么不使用不同的指令来运行呢?
    • 因为我想做的第一件事只适用于header_filter_by_lua,而另一件事不适用于body_filter_by_lua。最终采取了完全不同的方法。
    • @LucianDavidescu 你也可以add_header X-Send ngx.var.http_x_fetch。为什么要将标头从一个变量存储到另一个变量?所有请求标头均以ngx.var.http_* 的形式提供
    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2010-10-27
    • 2023-01-17
    • 2011-04-21
    • 2020-05-16
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多