Nginx服务器变量

时间:2017-11-08 14:22:27

标签: nginx lua openresty

我试图找到一个我正面临的问题的例子但到目前为止失败了,所以如果它已经得到回答就道歉。

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

server {
  set $asleep = 0;

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

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

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

只是想知道是否根本不可能,或者是否有人可以帮我解决如何让这类事情发挥作用?

谢谢

2 个答案:

答案 0 :(得分:0)

鉴于Data Sharing within an Nginx Worker中的建议,我认为您可能需要切换到使用模块来共享数据值,如该示例中所示和解释的那样。这个SO问题/答案及其中的示例也可能是相关的。

答案 1 :(得分:0)

Data Sharing within an Nginx Worker可以在nginx工作者中工作(如明确说明的那样)。如果这是你想要的 - 请看看Paul Kulchenko的答案。

但是如果你需要跨工人的全球旗帜,你可以使用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"))
            }
        }
    }
}