nginx可以通过ngx_http_limit_conn_modulengx_http_limit_req_module配置来限制ip在同一时间段的访问次数.

ngx_http_limit_conn_module:该模块用于限制每个定义的密钥的连接数,特别是单个IP​​地址的连接数.使用limit_conn_zone和limit_conn指令.

ngx_http_limit_req_module:用于限制每一个定义的密钥的请求的处理速率,特别是从一个单一的IP地址的请求的处理速率。使用“泄漏桶”方法进行限制.指令:limit_req_zone和limit_req.

ngx_http_limit_conn_module:限制单个IP的连接数示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
http {
  limit_conn_zone $binary_remote_addr zone=addr:10m;
   #定义一个名为addr的limit_req_zone用来存储session,大小是10M内存,
  #以$binary_remote_addr 为key,
  #nginx 1.18以后用limit_conn_zone替换了limit_conn,
  #且只能放在http{}代码段.
  ...
  server {
    ...
    location /download/ {
      limit_conn addr 1;   #连接数限制
      #设置给定键值的共享内存区域和允许的最大连接数。超出此限制时,服务器将返回503(服务临时不可用)错误.
       #如果区域存储空间不足,服务器将返回503(服务临时不可用)错误
    }

可能有几个limit_conn指令,以下配置将限制每个客户端IP与服务器的连接数,同时限制与虚拟服务器的总连接数:

1
2
3
4
5
6
7
8
9
http {
  limit_conn_zone $binary_remote_addr zone=perip:10m;
  limit_conn_zone $server_name zone=perserver:10m
  ...
  server {
    ...
    limit_conn perip 10;      #单个客户端ip与服务器的连接数.
    limit_conn perserver 100;  #限制与服务器的总连接数
    }

参考文档:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

 ngx_http_limit_req_module:限制某一时间内,单一IP的请求数

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
http {
  limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
  ...
  #定义一个名为one的limit_req_zone用来存储session,大小是10M内存,  
  #以$binary_remote_addr 为key,限制平均每秒的请求为1个,
  #1M能存储16000个状态,rete的值必须为整数,
  
  server {
    ...
    location /search/ {
      limit_req zone=one burst=5;
        
        #限制每ip每秒不超过1个请求,漏桶数burst为5,也就是队列.
        #nodelay,如果不设置该选项,严格使用平均速率限制请求数,超过的请求被延时处理.
        #举个栗子:
        #设置rate=20r/s每秒请求数为20个,漏桶数burst为5个,
        #brust的意思就是,如果第1秒、2,3,4秒请求为19个,第5秒的请求为25个是被允许的,可以理解为20+5
        #但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误.
        #如果区域存储空间不足,服务器将返回503(服务临时不可用)错误 
        #速率在每秒请求中指定(r/s)。如果需要每秒少于一个请求的速率,则以每分钟的请求(r/m)指定。 
        
    }

还可以限制来自单个IP地址的请求的处理速率,同时限制虚拟服务器的请求处理速率:

1
2
3
4
5
6
7
8
9
http {
  limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
  limit_req_zone $server_name zone=perserver:10m rate=10r/s;
  ...
  server {
    ...
      limit_req zone=perip burst=5 nodelay;  #漏桶数为5个.也就是队列数.nodelay:不启用延迟.
      limit_req zone=perserver burst=10;    #限制nginx的处理速率为每秒10个
    }

 

Nginx限制某个IP同一时间段的访问次数和请求数示例代码的更多相关文章

  1. Nginx限制某个IP同一时间段的访问次数

    nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数. HttpLimitReqModul用来限制连单位时间内连接数的模块, ...

  2. Nginx中如何限制某个IP同一时间段的访问次数

    如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候.其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见 ...

  3. 学习笔记_过滤器应用_1(分ip统计网站的访问次数)

    分ip统计网站的访问次数 ip count 192.168.1.111 2 192.168.1.112 59 统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做 ...

  4. Java web 实现 之 Filter分析ip统计网站的访问次数

    统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做拦截操作!因为我们只是用来做统计的. 用什么东西来装载统计的数据.Map<String,Integer& ...

  5. PHP结合Redis来限制用户或者IP某个时间段内访问的次数

    $redis = new Redis(); $redis->connect('127.0.0.1', 6379); //获取客户端真实ip地址 function get_real_ip(){ s ...

  6. Redis来限制用户 ------------IP某个时间段内访问的次数

    $redis = new Redis(); $redis->connect('127.0.0.1', 6379); //获取客户端真实ip地址 function get_real_ip(){ s ...

  7. BAT面试上机题从3亿个ip中找出访问次数最多的IP详解

    我们面临的问题有以下两点:1)数据量太大,无法在短时间内解决:2)内存不够,没办法装下那么多的数据.而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率:2)针对空间,就是 ...

  8. Nginx PREACCESS阶段 如何限制每个客户端每秒处理请求数

    L:56 limit_req_zone $binary_remote_addr zone=one:10m rate=2r/m;#以用户IP作为key 开辟共享内存10M 并且限制每分钟2个请求 rat ...

  9. Nginx限制访问次数和并发数

    Nginx限制访问速率和最大并发连接数模块--limit (防止DDOS攻击) http: ##zone=one或allips 表示设置名为"one"或"allips&q ...

随机推荐

  1. gdb 调试及优化

    调试程序时,在gdb内p var,会提示 No symbol "var" in current context. 即使没有使用任何编译优化选项,仍然不能查看,可能是这些变量被优化到 ...

  2. 李善友《认知升级之第一性原理》--507张PPT全解!_搜狐科技_搜狐网

      http://www.sohu.com/a/151470602_733114

  3. 【报错】RSA host key for 192.168.1.xxx has changed and you have requested strict checking.

    执行如下对机拷贝命令 scp .ssh/id_rsa.pub phpgo@192.168.1.35:~ 时,报错 RSA host key for 192.168.1.xxx has changed ...

  4. perl 信号

    来自:http://www.bagualu.net/wordpress/?p=1628 使用signal,能让你的程序功能更丰富.要在Linux下列出所有的signal, 利用kill -l即可. 下 ...

  5. lex yacc flex bison

    lex与yacc是两个在Unix下的分别作词法分析和语法分析的工具, Linux对应flex与bison. windows:http://sourceforge.net/projects/unxuti ...

  6. Drectx 3D窗口后台截图

    //GDI与DX截屏API操作 LPDIRECTDRAW lpDD = NULL; LPDIRECTDRAWSURFACE lpDDSPrime = NULL; LPDIRECTDRAWSURFACE ...

  7. tms web core程序部署

    tms web core程序部署 笔者把已经开发好的TMS WEB CORE程序部署到阿里云服务器上面,来作为例子. 1)复制TMS WEB CORE前端程序到服务器的c:\room\ 2)复制TMS ...

  8. 在Oracle电子商务套件版本12.2中创建自定义应用程序(文档ID 1577707.1)

    在本文档中 本笔记介绍了在Oracle电子商务套件版本12.2中创建自定义应用程序所需的基本步骤.如果您要创建新表单,报告等,则需要自定义应用程序.它们允许您将自定义编写的文件与Oracle电子商务套 ...

  9. 【docker】【Gitlab】gitlab中clone项目时,IP地址是一串数字(内网Gitlab的IP地址不正确)的问题解决

    首次在内网搭建Gitlab环境,在成功后在Gitlab上新建了一个项目. 然而在IDEA上clone项目时发现,项目地址如下: git@0096ce63c43f:root/jump.git 或者这样 ...

  10. 【ELK】【ElasticSearch】3.es入门基本操作

    docker安装elasticSearch步骤 ================================================================== 本篇参考: htt ...