一聚教程网:一个值得你收藏的教程网站

热门教程

nginx中if判断实现多重判断

时间:2022-06-30 18:57:39 编辑:袖梨 来源:一聚教程网

首先是伪代码(即不被nginx支持),写在这里只是为了方便理解:

 代码如下 复制代码

if ($remote_addr ~ "^(12.34|56.78)" && $http_user_agent ~* "spider") {
    return 403;
}

这是等效的,并真实可用的配置

 代码如下 复制代码

set $flag 0;
if ($remote_addr ~ "^(12.34|56.78)") {
    set $flag "${flag}1";
}
if ($http_user_agent ~* "spider") {
    set $flag "${flag}2";
}
if ($flag = "012") {
    return 403;
}

例2

 代码如下 复制代码

if ($request_uri ~ "xxx.php?xxx") {
set $iftmp Y;
}
if ($http_user_agent ~ "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)") {
set $iftmp "${iftmp}Y";
}
if ($iftmp = YY) { return 400;}
location / {
proxy_pass https://172.0.0.11;
}

重点一 set $iftmp Y 将iftmp设置为Y,set命令是一个大大的亮点

重点二 还是set部分set $iftmp "${iftmp}Y" 在set里面 ${iftmp}Y将参数叠加一次,${iftmp}是一个大大的亮点.

$request_uri是客户端请求的完整请求路径,$http_user_agent是用户端发出请求的浏览器参数.
上面的if判断是一个简单防cc攻击的原型,一般普通的cc攻击会固定攻击页面,然后浏览器参数也大多不变,当前两个if参数同时满足后第三个if就直接返回给请求端400错误,

热门栏目