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"))
}
}
}
}
我试图找到我所面临的问题的示例,但到目前为止失败了,如果已经得到解答,我们深表歉意。
在 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"))
}
}
}
}