2017-09-27 3 views
0

Lors de la création d'une variable à partir du nom du serveur dans Nginx et de l'appel d'un point de terminaison différent à l'aide de ngx.location.capture, la variable est alors supprimée.Les noms des variables Nginx sont perdus entre les captures OpenResty

L'exemple suivant montre en appelant testlocalhost et 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 
    } 
} 

Est-il possible de maintenir la variable entre les points d'extrémité sans modifier le corps ou en utilisant des paramètres d'URL?

Répondre

0

Vous devez ajouter à l'option ngx.location.capture pour partager ou copier toutes les variables disponibles.

https://github.com/openresty/lua-nginx-module#ngxlocationcapture

copy_all_vars préciser si vous souhaitez copier sur toutes les valeurs des variables Nginx de la demande actuelle à la sous-requête en question. Les modifications des variables nginx dans la sous-demande n'affecteront pas la demande actuelle (parent). Cette option a été introduite pour la première fois dans la version v0.3.1rc31.

share_all_vars préciser si vous souhaitez partager toutes les variables Nginx du subrequest à la demande actuelle (parent). les modifications des variables Nginx dans la sous-demande affecteront la demande actuelle (parente). L'activation de cette option peut entraîner des problèmes de débogage difficiles en raison de mauvais effets secondaires et est considérée comme mauvaise et nuisible. N'activez cette option que si vous savez parfaitement ce que vous faites.

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