NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)

时间:2021-04-03 16:34:27
  • 推荐 0 推荐
  • 收藏 3 收藏,839 浏览

nginx的if支持=!= 逻辑比较, 但不支持if中 <<>=<= 比较.
本示例使用了set-misc-nginx-module

location = /test/ {
default_type html;
set_random $a 0 9; #$a 随机 从0-9取
if ( $a <= 4 ){ #$a 如果 < 4 这是错误的写法
echo 'a: $a is lte 4';
}
if ( $a >= 5 ){ #$a 如果 > 5 这是错误的写法
echo 'a: $a is gte 5';
}
}

上面的配置, 在启动nginx时会报错误的.

即然不支持,那有没有办法小小地弥补下呢?

location = /test/ {
default_type html;
set_random $a 0 9; #$a 随机 从0-9取
if ( $a ~ [0-4] ){ #$a 如果 正则匹配 0-4
echo 'a: $a is lte 4';
}
if ( $a ~ [5-9] ){ #$a 如果 正则匹配 5-9
echo 'a: $a is gte 5';
}
}

测试10次:

a: 8 is gte 5
a: 9 is gte 5
a: 2 is lte 4
a: 1 is lte 4
a: 8 is gte 5
a: 0 is lte 4
a: 9 is gte 5
a: 1 is lte 4
a: 4 is lte 4
a: 5 is gte 5
...

骚年, 速度加入A.R.G.U.S.网络安全小组, 跟老夫们一起学nginx吧~