Nginx 服务器变量

Nginx server variables

我试图找到我所面临的问题的示例,但到目前为止失败了,如果已经得到解答,我们深表歉意。

在 nginx 配置中(可能包括 lua,我都试过了),我希望能够访问同一服务器内多个位置的变量。也就是说,我也希望能够修改它。例如,如果我这样做:

server {
  set $asleep = 0;

  location /go_to_sleep {
    set $asleep = 1;
    echo "sleepy";
  }

  location /status {
    echo "are we asleep? $asleep";
  }
}

基本上我不能使用参数,我想要一种方法来拥有一个我可以修改的局部变量。我遇到的问题是,无论我点击 /go_to_sleep 端点多少次,/status 始终将 $asleep 报告为 0。我认为这是因为 $asleep 仅在本地修改为 /[=21 的位置端点=].我也尝试过使用 lua 块,但我得到了相同的输出。

只是想知道这是否根本不可能,或者是否有人可以帮助我弄清楚如何让这种事情发挥作用?

谢谢

鉴于 Data Sharing within an Nginx Worker, I think you may need to switch to using modules to share data values, as shown and explained in that example. This SO question/answer 中的建议和其中的示例也可能相关。

Data Sharing within an Nginx Worker 将在 nginx worker 中工作(如明确说明的那样)。如果这是您想要的 - 请查看 Paul Kulchenko 的回答。

但是,如果您需要跨 worker 的全局标志,您可以使用 ngx.shared.DICT API

http {
    lua_shared_dict my_global_flags 10m;

    server {
        listen 80;

        location = /go_to_sleep {
            content_by_lua_block {
                local my_global_flags = ngx.shared.my_global_flags
                my_gobal_flags:set("asleep" , true)
                ngx.say("sleepy")
            }
        }

        location /status {
            content_by_lua_block {
                local my_global_flags = ngx.shared.my_global_flags
                ngx.say("are we asleep ", my_gobal_flags:get("asleep"))
            }
        }
    }
}