在 OpenResty 配置文件中定义和使用变量

我想在 OpenResty 配置文件的 location 块中定义一个变量并使用它。 变量定义如下:

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) -- 这个变量不起作用
         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 文件的任何部分使用它?

点赞
用户2060502
用户2060502

如果你只需要将常量值设置给你的变量,只需使用set $my_var 'h@3265';指令,避免使用content_by_lua_block

不可能在同一个地方使用proxy_passcontent_by_lua_block,因为两者都是内容阶段指令。 在你的配置中,content_by_lua_block被忽略了。

如果你需要使用更复杂的Lua逻辑来设置变量,请使用set_by_lua_block

2020-01-29 15:48:50
用户9885009
用户9885009

谢谢大家,我把配置文件改成了以下内容,现在可以正常使用了。

location /projects {

   header_filter_by_lua '
      local my_var = "h%403265"             #**注意**
      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)。

2020-01-30 06:48:29