因为nginx配置文件中不支持逻辑运算,所以需要同时满足多个条件的话 可以用如下方式
set $flag 0; # 设置个初始值
if ($uri !~ (/aaa|/bbb/ccc|/ddd|/eee|/fff/v2n)){ #判断请求的uri 里面有没有包含这些内容("/app" "/bbb/ccc" "/ddd" "/eee" "/fff/v2n")
set $flag "${flag}1";#如果不包含 赋值为01
}
if ($host ~ ^(www.aa.bb)){# 如果是通过域名www.aa.bb 访问进来的
set $flag "${flag}1"; # 赋值为011
}
if ($flag = "011"){
return 403; #返回403状态码 整体就是从域名www.aa.bb请求进来的 且uri内容不包含"/app" "/bbb/ccc" "/ddd" "/eee" "/fff/v2n"的都返回403
}
为了方便验证观察 可以在nginx的日志设置 log_format main里面加两个参数 "$host" "$flag" 来打印出来 请求来源地址 和flag值
这样就做到了控制