nginx if表示 案例

  1. 案例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;
}

你可能感兴趣的:(nginx if表示 案例)