Nginx根据UA过滤请求

有需求一个系统只允许微信和钉钉访问,所以配置Nginx规则过滤UA

配置文件

server {
    listen       80;
    server_name  localhost;
    set $flag 0;
    if ($http_user_agent !~ "MicroMessenger" ){
        set $flag "${flag}1";
    }
    if ( $http_user_agent !~ "DingTalk" ){
        set $flag "${flag}2";
    }
    if ($flag = "012") {
        return 403;
    }
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

踩过的坑

一. Nginx多条件判断

问题

nginx的配置中不支持if条件的逻辑与、逻辑或运算 ,并且不支持if的嵌套语法*

解法

定义变量,判断变量状态。