nginx if判断实现逻辑运算 AND 和 OR 的方法
在 nginx 配置文件,if 指令可以实现简单的判断,本身并不支持 and,or 以及嵌套,同时也不支持 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,通过这种方法来实现