OpenResty捕获之间丢失了Nginx变量名

时间:2017-09-27 15:59:57

标签: nginx lua openresty

当在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参数的情况下在端点之间维护变量?

1 个答案:

答案 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)';
    }