nginx if判断实现逻辑运算 AND 和 OR 的方法

nginx 配置文件,if 指令可以实现简单的判断,本身并不支持 andor 以及嵌套,同时也不支持 else, 可以通过变相的方法来实现。

基本思路:设置一个变量,然后根据情况,修改变量,最后判断变量

实现如下:

 1set $custom_flag 0;
 2
 3if ($http_referer !~ admin[0-9]+\.mylass\.com) {
 4    set $custom_flag ${custom_flag}1;
 5}
 6if ($http_referer !~ manager\.mylass\.com) {
 7    set $custom_flag ${custom_flag}1;
 8}
 9
10if ($custom_flag = 011) {
11    rewrite .* /bad-request/http-error-400.html break;
12}

本例,通过设置一个初始变量 custom_flag 等于 0,再判断后续情况。

若两个条件都成立,则 custom_flag 的值最后必定是 011。符合其中一条,则最后的值是 01,都不符合,则是 0,通过这种方法来实现