如何定义的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
}
}
你可以做一个小窍门。 如果此值必须从每一个访问的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
指令都可以在这里: 地图指示