nginx 代理转发控制过滤源地址的请求

因为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值

这样就做到了控制

 

posted @ 2021-04-07 15:24  学无止境~永远在路上  阅读(861)  评论(0编辑  收藏  举报