nginx if 条件 cookie/header 值为 0

nginx if 条件 cookie/header 值为 0

我有一个名为 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,并使用第二个映射进行解析。

您可以使用正则表达式和捕获组修改映射匹配,并在映射值中使用捕获结果。

相关内容