• nginx限制ip访问频率


    Nginx通过limit_conn_zone 和 limit_req_zone对同一个IP地址进行限速限流,可防止DDOS/CC和flood攻击


    limit_conn_zone是限制同一个IP的连接数。而一旦连接建立之后 。客户端就会通过这次的连接发送多次请求,那么在此期间的请求频率和速度进行限制就需要limit_req_zone

    limit_conn_zone配置

    连接数限制,相当于限制了nginx与客户端之间的管道个数

    http区块的配置:

    limit_conn_zone $binary_remote_address zone=asia; 10m;
    # 这个配置的意思就是定义一个名为 asia的limit_req_zone用来存储session 
    # 内存为10m大小


    server区块配置如下;

    limit_conn asia 2;
    # 单个客户端ip与服务器的连接数

    limit_req_zone配置:

    请求频率 限制,相当于限制了nginx与客户端管道之间水的流速

    http区块配置:

    limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

    server区块配置:

    limit_req_zone=one burst=10;

    burst漏桶原理

    rate=5r/s :从单一IP地址每秒5个请求是允许的
    burst=10:允许超过频率rate限制的请求数不多于10个
    当每秒请求超过5个 但是在10个以下,也就是每秒请求的数量在5-10之间的请求将被延时delay,虽然没有明确的定义delay,默认就是延时的,因为漏桶其实类似队列Queue或消息系统,
    当每秒请求数量超过最低速率每5个请求时,多余的请求将会进入这个队列排队等待。如同机场安检,一次放入5个 。多余5个 。小于10个排队等待
    注:这里的队列或者漏桶是以秒为单位的
    如果每秒的请求超过10个 ,也就是超出了burst的限制 。那么也不用排队,而是直接回绝返回 503错误(Service Temporarily Unavailable 服务暂时不可用)

    如果我们使用nodelay:

    limit_req zone=one burst=10 nodelay;

    这表示,如果每秒请求在5-10个之间会尽快完成,也就是以每秒10个速率完成,超过每秒10+5也就是15个就立即返回503,因此nodelay实际没有了延时,也就取消了队列等候过渡。
    在Twitter Facebook LinkedIn这类大型网站中,由于访问量巨大,通常会在http服务器后面放置一个消息队列,比如Apache Kafka,用来排队大量请求,
    因此,对于中小型网站,推荐使用delay方案,而不要写明nodelay,但是网络上其他各种文章几乎都是推荐nodelay.

    防止POST攻击:

    上面总结了三个限速限流设置方式,还有一种能够防止POST攻击,黑客通过发出大量POST请求对网站各种URL进行试探攻击,可以通过下面方式防止

    http {
    ... #nginx.conf 配置
    #如果请求类型是POST 将ip地址映射到 $limit 值
    map $request_method $limit {
    default "";
    POST $binary_remote_addr;
    }
    #创造10mb zone内存存储二进制ip
    limit_req_zone $limit zone=my_zone:10m rate=1r/s;
    }

    带宽限制:

    limit_rate 50k;
    limit_rate_after 500k;
    当下载的大小超过500k以后,以每秒50K速率限制。

    # 示例

    location /flv/ {
        flv;
        limit_rate_after 500k;
        limit_rate       50k;
    }

    来源 

    nginx中的limit_req限速设置配置示例 - Nginx - 服务器之家

    Nginx 限制ip的访问频率 (qq.com) 

  • 相关阅读:
    Docker--1. 初识Docker安装与踩坑
    golang validator v10 自定义验证方法和错误
    【Java】String类OJ题
    2022山东健康展,健康产业展,DJK中国健博会,睡眠健康展
    [附源码]计算机毕业设计JAVAjsp高校奖学金评定管理系统
    Vulnhub_Noob
    项目管理培训超全总结!
    【华为上机考试真题 2022】最大整数
    Go语言中接口interface(多接口,空接口,类别开关)的应用
    离职原因千万不要这样说!
  • 原文地址:https://blog.csdn.net/csdncjh/article/details/125434148