php限制ip访问次数 并发_[转]nginx限制某个IP同一时间段的访问次数
如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候。其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。
cc攻击一般就是使用有限的ip数对服务器频繁发送数据来达到攻击的目的,nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数来防cc攻击。
HttpLimitReqModul用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。一旦并发连接超过指定数量,就会返回503错误。
HttpLimitConnModul用来限制单个ip的并发连接数,使用limit_zone和limit_conn指令
这两个模块的区别前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制
HttpLimitReqModul 限制某一段时间内同一ip访问数实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
http{
...
#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
#以$binary_remote_addr 为key,限制平均每秒的请求为20个,
#1M能存储16000个状态,rete的值必须为整数,
#如果限制两秒钟一个请求,可以设置成30r/m
limit_req_zone$binary_remote_addr zone=allips:10mrate=20r/s;
...
server{
...
location{
...
#限制每ip每秒不超过20个请求,漏桶数burst为5
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,
#第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#第1秒25个请求时,5个请求放到第2秒执行,
#设置nodelay,25个请求将在第1秒执行。
limit_req zone=allips burst=5nodelay;
...
}
...
}
...
}
HttpLimitZoneModule 限制并发连接数实例
limit_zone只能定义在http作用域,limit_conn可以定义在http server location作用域
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
http{
...
#定义一个名为one的limit_zone,大小10M内存来存储session,
#以$binary_remote_addr 为key
#nginx 1.18以后用limit_conn_zone替换了limit_conn
#且只能放在http作用域
limit_conn_zone one $binary_remote_addr 10m;
...
server{
...
location{
...
limit_conn one20; #连接数限制
#带宽限制,对单个连接限数,如果一个ip两个连接,就是500x2k
limit_rate500k;
...
}
...
}
...
}
nginx白名单设置
以上配置会对所有的ip都进行限制,有些时候我们不希望对搜索引擎的蜘蛛或者自己测试ip进行限制,
对于特定的白名单ip我们可以借助geo指令实现。
1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
http{
geo$limited{
default1;
64.233.160.0/190;
65.52.0.0/140;
66.102.0.0/200;
66.249.64.0/190;
72.14.192.0/180;
74.125.0.0/160;
209.85.128.0/170;
216.239.32.0/190;
#M$
64.4.0.0/180;
157.60.0.0/160;
157.54.0.0/150;
157.56.0.0/140;
207.46.0.0/160;
207.68.192.0/200;
207.68.128.0/180;
#yahoo
8.12.144.0/240;
66.196.64.0/180;
66.228.160.0/190;
67.195.0.0/160;
74.6.0.0/160;
68.142.192.0/180;
72.30.0.0/160;
209.191.64.0/180;
#My IPs
127.0.0.1/320;
123.456.0.0/280;#example for your server CIDR
}
geo指令定义了一个白名单$limited变量,默认值为1,如果客户端ip在上面的范围内,$limited的值为0
2.使用map指令映射搜索引擎客户端的ip为空串,如果不是搜索引擎就显示本身真是的ip,这样搜索引擎ip就不能存到limit_req_zone内存session中,所以不会限制搜索引擎的ip访问
map $limited $limit {
1 $binary_remote_addr;
0 "";
}
3.设置limit_req_zone和limit_req
limit_req_zone $limit zone=foo:1m rate=10r/m;
limit_req zone=foo burst=5;
最后我们使用ab压php-fpm的方式,对上面的方法效果实际测试下
例1:限制只允许一分钟内只允许一个ip访问60次配置,也就是平均每秒1次
首先我们准备一个php脚本放在根目录下$document_root
test.php
nginx配置增加limit_req_zone 和 limit_req
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
http{
...
limit_req_zone$binary_remote_addr zone=allips:10mrate=60r/m;
...
server{
...
location{
...
limit_req zone=allips;
...
}
...
}
...
}
ab -n 5 -c 1 http://www.weizhang.org/test.php
118.144.94.193 - - [22/Dec/2012:06:27:06 +0000] "GET /test.php HTTP/1.0" 200 11000 "-" "ApacheBench/2.3"
118.144.94.193 - - [22/Dec/2012:06:27:06 +0000] "GET /test.php HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
118.144.94.193 - - [22/Dec/2012:06:27:07 +0000] "GET /test.php HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
118.144.94.193 - - [22/Dec/2012:06:27:07 +0000] "GET /test.php HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
118.144.94.193 - - [22/Dec/2012:06:27:07 +0000] "GET /test.php HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
未设置brust和nodelay可以看到该配置只允许每秒访问1次,超出的请求返回503错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
http{
...
limit_req_zone$binary_remote_addr zone=allips:10mrate=60r/m;
...
server{
...
location{
...
limit_req zone=allips burst=1nodelay;
...
}
...
}
...
}
ab -n 5 -c 1 http://www.weizhang.org/test.php
118.144.94.193 - - [22/Dec/2012:07:01:00 +0000] "GET /test.php HTTP/1.0" 200 11000 "-" "ApacheBench/2.3"
118.144.94.193 - - [22/Dec/2012:07:01:00 +0000] "GET /test.php HTTP/1.0" 200 11000 "-" "ApacheBench/2.3"
118.144.94.193 - - [22/Dec/2012:07:01:01 +0000] "GET /test.php HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
118.144.94.193 - - [22/Dec/2012:07:01:01 +0000] "GET /test.php HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
118.144.94.193 - - [22/Dec/2012:07:01:01 +0000] "GET /test.php HTTP/1.0" 503 537 "-" "ApacheBench/2.3"
设置brust=1和nodelay后允许第1秒处理两个请求。
转自:http://www.nginx.cn/446.html
php限制ip访问次数 并发_[转]nginx限制某个IP同一时间段的访问次数相关推荐
- php限制ip访问次数 并发_PHP实现redis限制单ip、单用户的访问次数功能示例
本文实例讲述了PHP实现redis限制单ip.单用户的访问次数功能.分享给大家供大家参考,具体如下: 有时候我们需要限制一个api或页面访问的频率,例如单ip或单用户一分钟之内只能访问多少次 类似于这 ...
- ip访问次数统计 nginx_Linux分析Nginx日志统计IP访问次数的shell脚本
平时运维遇到最多的就是nginx的日志分析了,要时常做系统监控,检查IP的访问次数是否有异常,防止恶意访问. 假设我的nginx日志如下: ....... 211.253.43.23 - - [03/ ...
- ip地址 默认网关_如何查找默认网关IP地址?
ip地址 默认网关 The default gateway is a network term used to specify a special host that is used to acces ...
- java 根据ip获取mac地址_利用java如何根据IP获取mac地址
利用java如何根据IP获取mac地址 发布时间:2020-11-25 15:49:42 来源:亿速云 阅读:74 作者:Leah 利用java如何根据IP获取mac地址?针对这个问题,这篇文章详细介 ...
- 易语言单窗口单ip软件源码_梦幻西游怎样多开ip转金?十大攻略秘籍速来看
各位好!,我依然是小芝麻,近期几日总是有盆友在私聊我,"小芝麻看着你的转金专缉,那么多方式,能够 帮我建议一类,最安全可靠能用的吗?""小芝麻,你的转金攻略大全,我有点儿 ...
- ip申请 web应用_网络协议端口TCP/IP概览
TCP TCP 用于从应用程序到网络的数据传输控制. TCP 负责在数据传送之前将它们分割为 IP 包,然后在它们到达的时候将它们重组. =============================== ...
- tomcat加上了https后访问不了_西部数码使用指南:部署https后访问提示存在安全隐患的排查解决方法...
版权归西部数码所有,原文链接:https://www.west.cn/faq/list.asp?unid=2374 部署https后访问域名出现如下提示: 您的连接存在安全隐患 此网站使用的安全性配置 ...
- 安卓studio访问mysql数据库_小白通过JDBC在AndroidStudio一步步来访问MYSQL数据库-Go语言中文社区...
许久没来写博客了,不是因为没有时间,而是把时间拿来敲一些设计模式,数据结构了,毕业不是科班出身,还是得练习下基本功. 今天突然想玩玩JDBC,说做就做,这里记录我的整个操作过程,数据的流程参与互联网上 ...
- nginx 防止恶意域名解析_配置nginx只允许域名访问,禁止ip访问【图文教程】
平凡也就两个字: 懒和惰;成功也就两个字: 苦和勤;优秀也就两个字: 你和我.跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!每一篇文章都是心 ...
最新文章
- sql server 2005 T-SQL BEGIN TRANSACTION (Transact-SQL)
- Forbidden Attack:7万台web服务器陷入被攻击的险境
- android之下载416错误
- 框架:@Bean注解
- html input或textarea 如何在光标处插入内容
- 寻找GridView中模板列中的控件
- 保留数据给硬盘增加分区
- java datasource 配置_Spring boot 基于注解方式配置datasource
- LINUX编译OPENJDK:The tested endian intarget (big) differs from the endian expected to be found in the
- Yii2的redis扩展
- 刘汝佳第二章习题(前四)
- pdf打不开无法启动计算机丢失,电脑打开PDF文档时发生错误文件已损坏怎么修复...
- 对泊松分布的一点理解
- 海龟交易法则(中译文)
- 关于阿里云服务器的使用(入门级)
- leetcode 笨阶乘
- 什么是堆漏洞挖掘?堆的glibc实现、Arena(main_arena、thread_arena)
- 辰视携3D机器视觉技术亮相第九届中国电子信息博览会
- 基于 uni-app 和 uni-cloud 小程序项目开发实战
- 讲真话、求真知、做真我——Facebook COO桑德伯格2012哈佛商学院毕业演讲
热门文章
- (72)进程挂靠(attach)使用备用APC队列 SavedApcState 保存父进程 APC 队列,分析 NtReadVirtualMemory
- 【内网渗透】利用非常规手段突破安全策略上线CS
- 【Web安全】JSP内存马研究
- 【技术原创】MailEnable开发指南
- 1.API的调用过程(3环部分)
- do while循环猜电脑给出的随机数
- C语言常见的错误类型
- python开发跟淘宝有关联微_使用Python分析淘宝用户行为
- 系统设计说明书案例_案例 | 太阳能+热泵枸杞烘干系统设计及经济性分析
- 架构评审,技术总监怒了,丢给我 400 个架构案例,先研究透!