如何定义的nginx的conf文件中的全局变量(How to define a global var

2019-08-07 14:38发布

如何定义的nginx的conf文件中的全局变量,定义HTTP块一个全局变量,并且下面所有的服务器和地点可以使用它。

http{
      some confs
      ...
      //define a global var mabe like
      set APP_ROOT /home/admin
      // and it can be use in all servers and locations below, like
      server {
        root $APP_ROOT/test1
      }

      server {
        root $APP_ROOT/test2
      }
  }

Answer 1:

你可以做一个小窍门。 如果此值必须从每一个访问的server模块在一个http模块,你可以使用map指令。 如何将这项工作?
map指令允许你在一个在任何地点使用变量http其价值将在一些关键的地图来计算块。 全说服力的例子:

http {

  ...

  /* 
     value for your $my_everywhere_used_variable will be calculated
     each time when you use it and it will be based on the value of $query_string.
  */
  map $query_string $my_everywhere_used_variable {

    /* 
       if the actual value of $query_string exactly match this below then 
       $my_everywhere_used_variable will have a value of 3
    */
    /x=1&y=2&opr=plus     3;

    /* 
       if the actual value of $query_string exactly match this below then
       $my_everywhere_used_variable will have a value of 4
    */
    /x=1&y=4&opr=multi    4;

  /*
    it needs to be said that $my_everywhere_used_variable's value is calculated each
    time you use it. When you use it as pattern in a map directive (here we used the
    $query_string variable) some variable which will occasionally change 
    (for example $args) you can get more flexible values based on specific conditions
  */
  }

  // now in server you can use this variable as you want, for example:

  server {

    location / {
      rewrite .* /location_number/$my_everywhere_used_variable;
      /* 
         the value to set here as $my_everywhere_used_variable will be
         calculated from the map directive based on $query_string value
      */
    }
  }
}

所以,现在,这是什么意思你? 您可以使用map指令来设置一个全局变量的所有server用这个简单的把戏块。 您可以使用default关键字设置为你的映射值的默认值。 正如在这个简单的例子:

map $host $my_variable {
  default lalalala;
}

在这个例子中,我们计算的价值$my_variable$host值,但实际上它并不重要$host是因为我们将始终设置lalalala为默认情况下,没有其他的选择我们的变量的值。 现在,在你的代码随处可见,当你将使用$my_variable以同样的方式与所有其他可用变量(例如与创建set指令),你会得到lalalala的价值

为什么是这比单纯使用更好的set指令? 由于set指令,如医生说nginx的一套指令只是内部访问server, location and if块,所以它不能被用来为一些创建全局变量server块。

有关文件map指令都可以在这里: 地图指示



文章来源: How to define a global variable in nginx conf file
标签: nginx