当在Nginx中从server_name创建变量并使用ngx.location.capture调用不同的端点时,变量就会消失。
以下示例通过调用testlocalhost和acclocalhost:
来演示server {
listen 1003;
server_name ~^(?<name>test|acc)localhost$; #<-Name is set here
location / {
#return 200 $name; #This would return the expected test or acc
content_by_lua 'local options = {
method = ngx.HTTP_GET,
}
local res = ngx.location.capture("/internal", options)
ngx.say(res.body)';
}
location /internal {
return 200 $name; #<- Name is empty here
}
}
有没有办法在不修改主体或使用url参数的情况下在端点之间维护变量?
答案 0 :(得分:0)
您需要添加ngx.location.capture选项以共享或复制所有可用变量。
https://github.com/openresty/lua-nginx-module#ngxlocationcapture
copy_all_vars 指定是否复制所有Nginx变量 当前请求对相关子请求的值。 子请求中nginx变量的修改不会受到影响 当前(父)请求。这个选项最初是在 v0.3.1rc31 release。
share_all_vars 指定是否共享所有Nginx变量 使用当前(父)请求的子请求。修改 子请求中的Nginx变量将影响当前(父) 请求。启用此选项可能会导致难以调试的问题 不良副作用,被认为是坏的和有害的。仅启用此功能 当你完全知道自己在做什么时,选项。
location / {
#return 200 $name; #This would return the expected test or acc
content_by_lua 'local options = {
method = ngx.HTTP_GET,
share_all_vars = true
}
local res = ngx.location.capture("/internal", options)
ngx.say(res.body)';
}