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. 编码自动识别工具 uchardet

    本文转自网络 最近在给OpenCC做图形界面,遇到一个问题:OpenCC默认只能转换utf-8文本,其他编码像GB18030,BIG5只能转换成utf-8以后,才能用OpenCC转换.这个问题说大不大 ...

  2. Codeforces Round #375 (Div. 2) E. One-Way Reform 欧拉路径

    E. One-Way Reform 题目连接: http://codeforces.com/contest/723/problem/E Description There are n cities a ...

  3. 二分法(折半查找法)小demo

    使用此算法,必须有一个前提,那就是数组必须是有序的. package com.ly.tcwireless.international.test; import org.junit.Test; publ ...

  4. Maven 项目不打包 *.hbm.xml 映射文件

    使用 Maven 部署 Java Web 项目时,Hibernate 的映射文件 *.hbm.xml 没有被打包部署到目标目录下,解决方法:在 pom.xml 文件中 <build> 节点 ...

  5. 【转载】Android dip,px,pt,sp 的区别

     dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. ...

  6. html5模拟平抛运动

    <html> <head> <meta charset=utf-8> <title>html5炮弹</title> <script&g ...

  7. Xamarin.iOS,AOT,JIT,Limitations

    Since applications on the iPhone using Xamarin.iOS are compiled to static code, it is not possible t ...

  8. GoJS 、 GoDiagram

    http://gojs.net/latest/intro/makingSVG.html http://www.nwoods.com/ http://gojs.net/latest/intro/shap ...

  9. 大并发下TCP内存消耗优化小记(86万并发业务正常服务)

    转自:http://blog.csdn.net/u010954257/article/details/54178160 最近在做一个大并发服务的测试(目前测到86万,当然有大量长连接,每天打的日志高到 ...

  10. Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out

    问题: java连接不上redis. 异常信息: Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.ne ...