gpt4 book ai didi

nginx - 如何在nginxconf文件中定义全局变量

转载 作者:行者123 更新时间:2023-12-02 14:50:08 24 4
gpt4 key购买 nike

如何在nginx的conf文件中定义一个全局变量,在http block 中定义一个全局变量,并且下面的所有服务器和位置都可以使用它。

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
}
}

最佳答案

你可以做点小事。如果必须可以从一个 http block 中的每个 server block 访问该值,则可以使用 map 指令。这将如何运作?
map 指令允许您在 http block 中的任何位置使用变量,该变量的值将根据某些映射键进行计算。最能说明问题的例子:

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 block 设置全局变量。您可以使用 default 关键字为您的 map 值设置默认值。就像这个简单的例子一样:

map $host $my_variable {
default lalalala;
}

在这个例子中,我们根据$host值计算$my_variable的值,但实际上$host是什么并不重要> 是因为默认情况下我们总是将 lalalala 设置为变量的值,并且没有其他选项。现在,在代码中的任何地方,当您以与所有其他可用变量相同的方式使用 $my_variable 时(例如使用 set 指令创建),您将获得 的值啦啦啦啦

为什么这比简单地使用 set 指令更好?因为 set 指令,如文档所述 nginx set directive只能在 server、location 和 if block 内部访问,因此不能用于为多个 server block 创建全局变量。

有关 map 指令的文档可在此处找到:map directive

关于nginx - 如何在nginxconf文件中定义全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14433309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com