zoukankan      html  css  js  c++  java
  • Nginx对同一IP限速限流

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

    limit_conn_zone $binary_remote_address zone=addr:10m;

    limit_conn addr 2;

    有了连接数限制,相当于限制了客户端浏览器和Nginx之间 的管道个数,那么浏览器通过这个管道运输请求,如同向自来水管中放水,水的流速和压力对于管道另外一端是有影响的。为了防止不信任的客户端通过这个管道疯狂发送请求,对我们的耗CPU的资源URL不断发出狂轰滥炸,必须对请求的速度进行限制,如同对水流速度限制一样。

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

    limit_req zone=one burst=10;

     

    • rate=5r/s:从单一IP地址每秒5个请求是允许的,
    • burst=10:允许超过频率rate限制的请求数不多于10个
    • 当每秒请求超过5个,但是在10个以下,也就是每秒请求的数量在5到10之间的请求将被延时 delay,虽然这里没有明写delay,默认是延时,因为漏洞其实类似队列Queue或消息系统, 当每秒请求数量超过最低速率每秒5个时,多余的请求将会进入这个队列排队等待。如同机场安检,一次放入5个,多于5个,小于10个的排队等待,注意:这个队列或漏洞是以每秒为单位的
    • 如果每秒请求数超过10个,也就是burst的限制,那么也不排队了直接回绝,返回503 http。也就是说排队长度不能超过10个。

    如果我们使用nodelay:

    limit_req zone=one burst=10 nodelay;

    在Twitter Facebook LinkedIn这类大型网站中,由于访问量巨大,通常会在http服务器后面放置一个消息队列,比如Apache Kafka,用来排队大量请求,因此,对于中小型网站,推荐使用delay方案,而不要写明nodelay,但是网络上其他各种文章几乎都是推荐nodelay.

    limit_rate 50k;limit_rate_after 500k;

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

     

    http://blog.csdn.net/jek123456/article/details/53334095

  • 相关阅读:
    shell十三问?
    OS + Linux nmon / nmon analyser / nmon_analyser_v52_1.zip
    nGrinder windows agent / linux agent
    java Base64
    SearchServer Elasticsearch Cluster / kibana
    db mysql / mysql cluster 5.7.19 / my.cnf / thread_pool_stall_limit
    Mininet与真实网络链接的方法
    Install ProcessMaker 3.1 or 3.2 in CentOS/RHEL 7
    软件版本GA,RC,alpha,beta,Build 含义
    paper-9-Research and Implementation of MultiPath TCP on Mobile Smart Deviceses
  • 原文地址:https://www.cnblogs.com/lixiuran/p/7610627.html
Copyright © 2011-2022 走看看