全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 4946|回复: 11

[已解决] Nginx之if多重判断写法

[复制链接]
发表于 2012-5-19 14:59:27 | 显示全部楼层
为何要过滤这个 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1
发表于 2012-5-19 14:18:55 | 显示全部楼层
技术文章
 楼主| 发表于 2012-5-19 14:02:42 | 显示全部楼层
hitsword 发表于 2012-5-19 14:01
不懂。


手yin哥  好
发表于 2012-5-19 14:03:51 | 显示全部楼层
绝对菜鸟 发表于 2012-5-19 14:02
手yin哥  好

你妹。我跟手yin哥没关系。
发表于 2012-5-19 13:59:53 | 显示全部楼层
挖煤的。。。
发表于 2012-5-19 14:01:56 | 显示全部楼层
不懂。
发表于 2012-5-19 14:02:22 | 显示全部楼层
呵呵 学习一下 虽然不是很懂
 楼主| 发表于 2012-5-19 13:28:17 | 显示全部楼层 |阅读模式
nginx的if语法比较严格,并且还没and && || 这类写法,这样只能投机倒把另外想办法实现多重判断.
  1. if ($request_uri ~ "xxx.php?xxx") {
  2. set $iftmp Y;
  3. }
  4. if ($http_user_agent ~ "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)") {
  5. set $iftmp "${iftmp}Y";
  6. }
  7. if ($iftmp = YY) { return 400;}
  8. location / {
  9. proxy_pass https://172.0.0.11;
  10. }
复制代码
重点一 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攻击请求到正常页面,根据上面的实例可以依葫芦画瓢进行其他一些应用使用.

原文转载自:http://www.sky.la/2012/05/957.html

评分

参与人数 1威望 +20 收起 理由
shineme + 20 很给力!

查看全部评分

发表于 2012-5-19 13:31:12 | 显示全部楼层
nginx 能不用 if 就不用 if
if 会降低nginx性能
这是 Igor Sysoev 的原话
 楼主| 发表于 2012-5-19 13:32:22 | 显示全部楼层
lazyzhu 发表于 2012-5-19 13:31
nginx 能不用 if 就不用 if
if 会降低nginx性能
这是 Igor Sysoev 的原话

有判断就会运算 有运算就会有牺牲性能

在面对一些问题前   利大于弊的情况下  是可取的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-28 00:43 , Processed in 0.129989 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表