zoukankan      html  css  js  c++  java
  • Nginx 限流

    nginx限流

    nginx限流算法(漏桶算法)

    漏桶算法(Leaky Bucket)是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。
    漏桶可以看作是一个带有常量服务时间的单服务器队列,如果漏桶(包缓存)溢出,那么数据包会被丢弃。 在网络中,漏桶算法可以控制端口的流量输出速率,平滑网络上的突发流量,实现流量整形,从而为网络提供一个稳定的流量。
    如图所示,把请求比作是水,水来了都先放进桶里,并以限定的速度出水,当水来得过猛而出水不够快时就会导致水直接溢出,即拒绝服务。

    limit_req_zone

    nginx可以使用ngx_http_limit_req_module模块的limit_req_zone指令进行限流访问,防止用户恶意攻击刷爆服务器。ngx_http_limit_req_module模块是nginx默认安装的,所以直接配置即可。

    # 限速,每秒5个,内存区域10m,大概16万个session配置在http节点
    limit_req_zone $binary_remote_addr zone=limited:10m rate=5r/s;
    
    # server节点的配置
    server {
        listen          8080;
        server_name     xxx.com;
        location / {
            # 缓存区队列burst个,不延期即每秒最多可处理rate+burst个.同时处理rate个。
            limit_req               zone=limited burst=10 nodelay; 
            proxy_pass              http://127.0.0.1;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_intercept_errors  on;
            proxy_connect_timeout   60;
            proxy_send_timeout      60;
            proxy_read_timeout      120; # 长时操作的设置
         }
    }
    

    参数详解(limit_req_zone的参数)

    zone:limited:10m:表示一个内存区域大小为10m,并且设定了名称为limited.

    rate=5r/s:表示请求的速率是1秒5个请求,当单位设置成60r/m时,并不能达到限速1分钟60次的效果,它等同于1r/s。

    $binary_remote_addr:表示远程的ip地址,当此nginx前方还存在代理时,需进行处理

    参数详解(limit_req的参数)

    zone=limited:表示这个参数对应的全局设置就是limited的那个内存区域

    burst=10:表示请求队列的长度。

    nodelay:表示不延时,比如rate=5r/s,burst=10 那么来了15个请求,能一次搞定,否则,就是此秒只能搞定5个请求。一般都是不延期的设置。

    测试

    # -n 即指定压力测试总共的执行次数
    # -c 即指定的并发数
    
    $ ab -n 5 -c 5 http://192.168.0.133:8080/api/limited
    
    
  • 相关阅读:
    QT中PRO文件写法的详细介绍,很有用,很重要!
    What is the difference between authorized_key and known_host file for SSH
    SHELL DATE 命令详解
    Sample program to use PC/SC API.
    如何让用户关闭客户端IE时,触发Session_End事件
    Sql Create Function简单例子
    Css2.0实现圆角边框
    运算符重载的一个例子
    HTML获取URL传递的参数
    C#中自定义属性的例子
  • 原文地址:https://www.cnblogs.com/janlle/p/10746093.html
Copyright © 2011-2022 走看看