我有一个租赁位置,我希望在其中注册具有特定值的变量aet
。
location /aet {
default_type 'text/plain';
content_by_lua '
if ngx.var.host:match("(.*).nexus$") ~= nil then
aet = ngx.var.host:match("(.-)%.")
ngx.say(aet)
end
';
}
我想在另一个租赁地点/ getIp`
中使用此变量location /getIp {
default_type 'application/json';
rds_json on;
content_by_lua '
postgres_pass database;
postgres_query "SELECT ip FROM establishment_view WHERE aet = aet";
postgres_output rds;
';
}
我希望变量aet
初始化而无需调用路径/ aet
答案 0 :(得分:1)
您可以使用Data Sharing within an Nginx Worker
但如果您确实需要所有工作进程的全局变量,则可以使用ngx.shared.DICT API
http {
lua_shared_dict my_dict 10m;
server {
location /aet {
content_by_lua_block {
local my_dict = ngx.shared.my_dict
my_dict :set("aet", ngx.var.host:match("(.-)%."))
}
}
location /getIp {
set $aet = ""
access_by_lua_block {
local my_dict = ngx.shared.my_dict
ngx.var.aet = my_dict:get("aet")
}
postgres_pass database;
postgres_query "SELECT ip FROM establishment_view WHERE aet = aet";
postgres_output rds;
}
}
}
PS:您的nginx配置代码段错误 - 您在content_by_lua中使用了nginx指令postgres_ *。
同样不推荐使用* by_lua,使用* _by_lua_block。它可以为你节省很多时间。