如何设置能限制某个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访问数实例

http{...#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,#以$binary_remote_addr 为key,限制平均每秒的请求为20个,#1M能存储16000个状态,rete的值必须为整数,#如果限制两秒钟一个请求,可以设置成30r/mlimit_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作用域

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 one 20;#连接数限制#带宽限制,对单个连接限数,如果一个ip两个连接,就是500x2klimit_rate 500k;...}...}...}

nginx白名单设置

以上配置会对所有的ip都进行限制,有些时候我们不希望对搜索引擎的蜘蛛或者自己测试ip进行限制,

对于特定的白名单ip我们可以借助geo指令实现。

1.

http{geo $limited{default1;#google 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;#yahoo8.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 IPs127.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

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错误

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秒处理两个请求。

php限制ip访问次数 并发_nginx限制ip请求次数 以及并发次数相关推荐

  1. ip访问 webstorem_常见问题-iOS WebView IP直连 如何处理 Cookie

    WKWebView 无法使用 NSURLProtocol 拦截请求 针对该问题方案如下: 换用 UIWebView 使用私有 API 进行注册拦截 换用 UIWebView 方案不做赘述,说明下使用私 ...

  2. Oracle11g限制ip访问数据库,ORACLE 限制特定IP访问数据库

    (1)在9i中真正起作用的是sqlnet.ora文件,我们修改sqlnet.ora其实是最好最快的方法. 在sqlnet.ora中增加如下部分 ---------------------------- ...

  3. centos7 禁止ip访问_centos7 防火墙操作 屏蔽ip

    这里用到的是iptables命令 iptables -I INPUT -s 124.115.0.199 -j DROP 是屏蔽124.115.0.199这个IP iptables -I INPUT - ...

  4. 服务器禁止用ip访问站点,windows服务器禁止ip访问方法介绍

    下边是方法 控制面板-管理工具-本地安全策略  或者命令  gpedit.msc 选择创建 IP 安全策略 点选下一步 我们就是要禁止他,不和他说话,那么,取消勾选 直接按完成.那个勾选是默认的 注意 ...

  5. python使用代理ip访问网站_python使用代理ip访问网站的实例

    实例如下所示: # -*- coding: UTF-8 -*- from urllib import request if __name__ == "__main__": #访问网 ...

  6. 网站限制某些ip访问,仅允许某些ip…

    代码: function getIP() { return isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_ ...

  7. Linux上基于IP访问网站、基于同一IP不同端口访问网站、基于DNS域名访问网站、将不同域名解析到同一IP不同端口

    本文基于Linux上CentOS 7版本配合httpd服务.nginx进行配置演示 一.基于IP搭建web服务器 1.为虚拟机网卡新添加一个ip地址并重启网卡 2. 新建配置目录并写入内容 3.编辑配 ...

  8. 封禁恶意IP访问在我司实践总结

    1.需求分析 随着公司业务量的增长,有些人可能就会动些小心思搞你一下,爬虫或者恶意访问你,如何限制这些用户访问呢,今天做下总结,大体有三种方案:代码层面:http服务器(以nginx为例):服务器网络 ...

  9. ORACLE 限制特定IP访问数据库 访问白名单

    限制指定机器IP访问oracle数据库 通过使用数据库服务器端的sqlnet.ora文件可以实现禁止指定IP主机访问数据库的功能,这对于提升数据库的安全性有很大的帮助,与此同时,这个技术为我们管理和约 ...

最新文章

  1. EventBus的使用(一看就懂)
  2. Android之图片加载框架Picasso源码解析
  3. LaTeX技巧24:LaTeX常用命令集锦
  4. QT5 动态链接库的创建和使用
  5. 《R语言机器学习:实用案例分析》——1.2节R的数据结构
  6. ExtJS4.2学习(11)——高级组件之Grid
  7. Java 使用 Dom4j 解析 XML 指南
  8. c语言倒计时不影响进程_初学C语言没有项目练手怎么行,这17个小项目收下不谢...
  9. JavaScript内置的Math对象(附实例)
  10. 专访Wunderlist主设计师Jan Martin:永远不要盲目跟风流行趋势
  11. 浏览器保存图片时,将jfif改为jpg格式
  12. 黑苹果常用 工具+Kext+ACPI+UEFI驱动 下载
  13. Minimum Class Confusion for Versatile Domain Adaptation
  14. 几种经典的下肢力量练习方式
  15. 新会计准则——新增固定资产可以当月计提折旧
  16. [附源码]计算机毕业设计Python+uniapp学生选课APP3cnsl(程序+lw+APP+远程部署)
  17. onbeforeunload与onunload用法(转)
  18. 被11整除的四位偶数c语言,位和位差-什么叫奇数位和偶数位?能被11整除的数,奇 – 手机爱问...
  19. Ubunu安装一个更新版本的gda(2.3.2到 3.0.4)
  20. win10如何修改C盘User下的用户名

热门文章

  1. Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式
  2. Gprmax 三维地质雷达建模及在 paraview 中的可视化
  3. WORD样式保存为主题集?
  4. JAVA中File转MultiparFile
  5. JS兼容问题的函数封装文档
  6. linux脚本怎怎么屏蔽段落,怎么写shell脚本才能不耍流氓?
  7. php分页类示例下载,PHP 通用分页类的简单示例
  8. python怎么设置回文数_python如何写一个函数判断回文数?
  9. cocos creator粒子不变色_隐秘的物理粒子系统与渲染 !Cocos Creator LiquidFun !
  10. 计算机科学考试题目,附录A 计算机科学与技术学科综合考试人工智能真题