我试图找到一个我正面临的问题的例子但到目前为止失败了,所以如果它已经得到回答就道歉。
在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块,但我得到了相同的输出。
只是想知道是否根本不可能,或者是否有人可以帮我解决如何让这类事情发挥作用?
谢谢
答案 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"))
}
}
}
}