Определите и используйте переменную в конфигурационном файле OpenResty - PullRequest
1 голос
/ 28 января 2020

Я хочу определить переменную и использовать ее в блоке местоположения в файле конфигурации OpenResty. Переменная определяется так же:

location /projects {
   set $my_var '';
   content_by_lua_block {
      ngx.var.my_var = "h@3265";
   }

   header_filter_by_lua '
      local val = ngx.header["x-ausername"]
      if val then
         if (val ~= "sample3")
         and (val ~= ngx.var.my_var) -- this variable does not work
         and (val ~= "sample2")
         and (val ~= "sample1")
         and (val ~= "anonymous") then
            return ngx.exit(400)
         end
      end
   ';

   proxy_pass        http://MYSERVER.LOCAL:6565;
   proxy_set_header Host $host:$server_port;
   access_log off;
}

Но не парсится ngx.var.my_var. Как определить переменную и использовать ее в любой части файла nginx.conf?

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Спасибо всем, я изменил конфигурационный файл на следующий, и он отлично работает.

location /projects {

   header_filter_by_lua '
      local my_var = "h%403265"             #**Note**
      local val = ngx.header["x-ausername"]
      if val then
         if (val ~= "sample3")
         and (val ~= my_var) 
         and (val ~= "sample2")
         and (val ~= "sample1")
         and (val ~= "anonymous") then
            return ngx.exit(400)
         end
      end
   ';

   proxy_pass        http://MYSERVER.LOCAL:6565;
   proxy_set_header Host $host:$server_port;
   access_log off;
}

Примечание: в конфигурационном файле для принятия @ в переменной следует использовать процентное кодирование. Итак, @ равно %40 (h@3265 -> h% 403265).

0 голосов
/ 29 января 2020

Если вам просто нужно установить значение const для вашей переменной - просто используйте директиву set $my_var 'h@3265'; и избегайте content_by_lua_block.

Невозможно использовать proxy_pass и content_by_lua_block в одном и том же место, потому что оба являются директивами фазы содержимого. content_by_lua_block просто игнорируется в вашей конфигурации.

Если вам нужно использовать более сложные Lua logi c для установки переменной - используйте set_by_lua_block

...