Nginx中实现if多重判断写法
2014-04-03 18:12
281 查看
使用nginx的朋友可能都知道nginx的if语法比较严格,并且还没and && || 这类写法,如果你想多重判断我们就只能想其它办法了,下面我来给大介绍一种投机倒把另外想办法实现多重判断,方法介绍有需要了解的朋友可参考。
重点一 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错误,
这样就完成了一次简单的过滤cc攻击请求到正常页面,根据上面的实例可以依葫芦画瓢进行其他一些应用使用.假设我们需要对 /admin/ 路径进行rewrite,但同时要排除 /admin/images/ 路径不对该路径进行rewrite,可以采用下面的解决办法:
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错误,
这样就完成了一次简单的过滤cc攻击请求到正常页面,根据上面的实例可以依葫芦画瓢进行其他一些应用使用.假设我们需要对 /admin/ 路径进行rewrite,但同时要排除 /admin/images/ 路径不对该路径进行rewrite,可以采用下面的解决办法:
set $doRewrite "0"; if ($request_uri ~ ^/admin/) { set $doRewrite "1"; } if ($request_uri ~ ^/admin/images/) { set $doRewrite "0"; } if ($doRewrite = "1") { // do rewrite }
相关文章推荐
- nginxif多条件结合判断(实现限速)
- NGINX实现IF语句里的AND,OR多重判断
- NGINX实现IF语句里的AND,OR多重判断
- Nginx多重if判断的实现
- Nginx实现if多重判断配置方法示例
- 微信小程序 —— 瀑布流简单写法(css3属性加wx:if判断轻松实现)
- nginx if判断&&和||写法
- nginx if多条件判断
- oracle中if/else功能的实现的3种写法
- linux sh 脚本有关于文件判断操作符,与if配合实现逻辑控制
- oracle中if/else功能的实现的3种写法
- 避免重复写if判断的一种写法
- 用位运算实现求绝对值-有效避开if-else判断
- C标签和s标签的对比,特别是里面的if判断条件的写法
- 如何在JSP页面中使用JSTL标签实现if和if-else判断,判断条件使用<%=value%>
- jstl<c:if></c:if>判断的写法
- 实现1+2+3...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
- Nginx中if语句中的判断条件
- oracle中if/else功能的实现的3种写法
- mybatis 传入一个简单类型的参数,if判断的两种写法