nginx - 限制并发连接数和每秒请求数 limit_conn_zone&limit_req_zone Linux教程 nginx&apache


-http字段中配置
#limit_conn_zone:限制并发连接数,即同一时间连接数
#设置一个自定义名字(perip),大小为10M的缓存空间,$binary_remote_addr表示以每个IP地址来限制
    limit_conn_zone $binary_remote_addr zone=perip:10m;
#设置一个自定义名字(perserver),大小为10M的缓存空间,$server_name表示以server来限制
    limit_conn_zone $server_name zone=perserver:10m;

-在需要 限制并发数 和 下载带宽 的网站配置 server {}里加上如下代码:
    limit_conn perip 2;  #每个ip的并发连接数
    limit_conn perserver 20; #server总并发连接数
    limit_rate 1024k;#限制下载速度;

-limit_req_zone:限制单位时间内的请求数
#设置一个自定义名字(perip),大小为10M的缓存空间,每个IP地址,每秒接受1个请求
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
-设置一个自定义名字(perserver),大小为10M的缓存空间,server,每秒接受10个请求
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
    
-server的location字段配
location / {
    limit_conn addr 1; # 一次只允许每个IP地址一个连接。
    # 单个IP的请求数,burst:缓冲队列的长度,最多允许5个突发请求的到来,
    # nodelay:大于缓冲长度的將直接503,不设置nodelay则会排队等待
    limit_req zone=perip burst=5 nodelay; 
    limit_req zone=perserver burst=10; #总请求数
}

-补充说明下参数:
$binary_remote_addr是限制同一客户端ip地址;
$server_name是限制同一server最大并发数;
limit_conn为限制并发连接数;
limit_rate为限制下载速度;

limit_zone: 是针对每个IP定义一个存储session状态的容器.
这个示例中定义了一个10m的容器,按照32bytes/session, 可以处理320000个session。
limit_conn perip 1:限制每个IP只能发起一个并发连接。
limit_rate 100k: 对每个连接限速100k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate×2。
http  {
    # 限速IP白名单
    geo $limit {
        default 1;
        10.0.0.0/8 0;
        192.168.0.0/24 0;
        172.20.0.35 0;
    }
    
    # 白名单不限速,非白名单按照客户端IP限速
    map $limit $limit_key {
        0 "";
        1 $binary_remote_addr;
    }
    
    limit_conn_zone $server_name zone=perserver:10m;
    limit_req_zone $server_name zone=perserverreq:10m rate=10r/s;
    limit_conn_zone $limit_key zone=perip:10m;
    limit_req_zone $limit_key zone=two:10m rate=2r/s;
    limit_req_zone $limit_key zone=one:10m rate=1r/s;
    ...
    server  {
        ...
        # 限制每个网站每秒不超过10个请求,突发不超过10个请求。
        limit_req zone=perserverreq burst=10;
        # 限制每个网站最多接受100个请求
        limit_conn perserver 100;
        # 限制每个IP能够最多建立10个请求
        limit_conn perip 10;
        # 限制每个IP每秒不超过1个请求,突发不超过3个请求。
        limit_req zone=one burst=3 nodelay;
        
        location /search/ {
            # 限制每个IP每秒不超过1个请求。
            limit_req zone=one;
        }
        
        location /download/ {
            # 限制每个IP只能建立一个连接
            limit_conn perip 1;
            # 当请求的流量超500KB后进行限速
            limit_rate_after 500k;
            # 限速 50KB/s
            limit_rate 50k;
        }
    } 
}

进行压力测试: ab -c 2 -t 1 http://192.168.0.61/lwj/index.html


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回