在不同位置使用全局变量(路径)

我有一个租赁场所,想要注册一个带有特定值的变量 aet

location /aet {
    default_type 'text/plain';
        content_by_lua '
          if ngx.var.host:match("(.*).nexus$") ~= nil then
             aet = ngx.var.host:match("(.-)%.")
             ngx.say(aet)
          end
        ';
 }

我想在另一个租赁位置 / getIp 中使用这个变量。

location /getIp {
    default_type 'application/json';
    rds_json          on;

    content_by_lua '
        postgres_pass     database;
        postgres_query  "SELECT ip FROM establishment_view WHERE aet = aet";
        postgres_output rds;
    ';
}

我希望变量 aet 能在不需要调用路径 /aet 的情况下初始化。

点赞
用户2060502
用户2060502

你可以使用Nginx工作进程内的数据共享

但是如果你真的需要全局变量来供所有工作进程使用,你可以使用ngx.shared.DICTAPI

 http {
     lua_shared_dict my_dict 10m;
     server {
         location /aet {
             content_by_lua_block {
                 local my_dict = ngx.shared.my_dict
                 my_dict :set("aet", ngx.var.host:match("(.-)%."))
             }
         }
         location /getIp {
             set $aet = ""
             access_by_lua_block {
                 local my_dict = ngx.shared.my_dict
                 ngx.var.aet = my_dict:get("aet")
             }
             postgres_pass     database;
             postgres_query  "SELECT ip FROM establishment_view WHERE aet = aet";
             postgres_output rds;
         }
     }
 }

注:您的Nginx配置片段是错误的-您在content_by_lua内使用了nginx指令postgres_*。

此外,所有*by_lua已经过时,请使用*_by_lua_block。这将在转义方面为您节省大量时间。

2018-02-13 10:30:55