NGINX实现IF语句里的AND,OR多重判断

运维技术  

NGINX实现IF语句里的AND,OR多重判断

  • nginx的配置中不支持if条件的逻辑与/逻辑或运算 ,并且不支持if的嵌套语法,我们可以用变量的方式来实现:
  • 具体方法为AND 就用变量叠加,OR就用0或1切换 * 首先是伪代码(即不被nginx支持),写在这里只是为了方便理解:
if ($remote_addr ~ "/forum.php" && $query_string ~* "mod=ajax&action=downremoteimg&message=") {  
  return 403;
}
  • 这是等效的,并真实可用的配置
        set $flag 0;
        if ($request_uri ~* "/forum.php"){
            set $flag "${flag}1";
        }
        if ($query_string ~* "mod=ajax&action=downremoteimg&message=" ){
            set $flag "${flag}2";
        }
        if ($flag = "012") {
            return 403;
        }