- 案例1:
需求1 用户访问网站,客户端ip是172.1.x.x 并且 用户客户端是yucheng 则返回200
需求2 用户访问网站,客户端ip不是172.1.x.x并且 用户客户端是yucheng 则返回500 (如10.1 .x.x或10.2.x.x)
需求3 用户访问网站,客户端ip是172.16.x.x并且用户客户端是 yucheng 则返回400
需求4 用户访问网站,客户端ip是172.16.x.x并且用户客户端不是yucheng 则返回302
分析:
主要目标是在nginx实现 类似于脚本中 &&(并且) 和 -a
参考方法
#c 需求1 172.1.x.x 带yucheng 返回200
set $flag 0;
if ( $remote_addr ~ "^172\.1\."){
set $flag "${flag}1"; #c 如果 ip符合规则 则 $flag的内容是01
}
if ($http_user_agent ~ "yucheng"){ #c 如果用户的客户端是yucheng
set $flag "${flag}2"; #c set $flag 012 这时$flag的内容为012
}
if ($flag = "012"){ #c 判断变量即可确定返回值
return 200;
}
#c 需求2 非172.1.x.x 带yucheng返回500 (如10.1.x.x或10.2.x.x)
set $flag2 0;
if ( $remote_addr !~ "^172\.1\."){
set $flag2 "${flag2}1";
}
if ($http_user_agent ~ "yucheng"){
set $flag2 "${flag2}2";
}
if ($flag2 = "012"){
return 500;
}
#c 需求3 172.16.x.x 带yucheng返回400
set $flagt 0;
if ( $remote_addr ~ "^172\.16\."){
set $flagt "${flagt}1";
}
if ($http_user_agent ~ "yucheng"){
set $flagt "${flagt}2";
}
if ($flagt = "012"){
return 400;
}
#c 需求4 172.16.x.x 不带yucheng返回302
set $flag4 0;
if ( $remote_addr ~ "^172\.16\."){
set $flag4 "${flag4}1";
}
if ($http_user_agent !~ "yucheng"){
set $flag4 "${flag4}2";
}
if ($flag4 = "012"){
return 302;
}