我有一个名为 type 的 cookie 和标头,其值为 0、1、2(主要问题出在 0)。我尝试根据 cookie 和标头的值设置一个变量,并优先考虑标头值
我在 nginx 中遇到以下情况
if ($cookie_type) {
set $exp_type "exp$cookie_type";
}
if ($http_type) {
set $exp_type "exp$http_type";
}
因此,首先从 cookie 中获取类型,如果变量 exp_type 中设置了值(允许值为 0、1、2),则值看起来像 exp0、exp1、exp2。如果有标题,则给予其更高的优先级
这对于值 1 和 2 来说非常完美,但对于 0 来说就不行了,我明白了为什么。原因是因为该值转换为 0,而 if(0) 被视为 false。
所以我想检查是否有任何解决方法或完全不同的方法来做到这一点,因为我也在许多帖子中看到,如果不应该在 nginx 中使用
答案1
最适合用于map
这些目的。按http
级别定义地图:
map $http_type $exp_type {
2 exp2;
1 exp1;
0 exp0;
default $exp_cookie;
}
map $cookie_type $exp_cookie {
2 exp2;
1 exp1;
0 exp0;
default "";
}
当有对变量的引用时$ext_type
,nginx 将使用第一个映射查找结果,并http_type
根据映射检查值。
如果在第一个映射中未找到匹配的条目,则default
值指向$exp_cookie
,并使用第二个映射进行解析。
您可以使用正则表达式和捕获组修改映射匹配,并在映射值中使用捕获结果。