NGINX并发限制原理及源码分析

概述

上篇我们分析了NGINX速率限制的原理,本篇我们继续分析NGINX并发限制的原理,后面一篇,我们继续分析NGINX带宽限制的原理。

速率限制用来限制单个客户端在单位时间的请求数目,而并发限制用来限制同一时间的连接总数。本篇文章我们对并发限制功能的原理和源代码进行分析,从而可以更好地理解和使用此功能。

原理

并发限制实现原理相对简单。它像速率限制那样需要采用漏桶或者令牌头算法进行流量的控制和整形。它只需维护一个计数表示当前的连接数,然后在建立连接时增加计数,连接断开时减少计数。当新的连接到来时比较当前计数和配置参数的大小关系就可以决定是否可以建立连接。

配置语法

NGINX通过limit_conn_zone和limit_conn两条指令来实现并发限制。指令limit_conn_zone定义了并发限制的参数,指令limit_conn在所在的location使能并发限制。

http {

    limit_conn_zone $binary_remote_addr zone=addr:10m;

    ...

    server {

        ...

        location /download/ {

            limit_conn addr 1;

        }

}

指令limit_conn_zone

配置语法:

Syntax:            limit_conn_zone key zone=name:;

Default:           —

Context:          http

参数key定义了基于什么样的参数进行速率控制。比如下面的例子中的$binary_remote_addr就是表示使用客户端的ip地址(remote_addr)进行速率控制。而且为了节省存储空间采用了二进制的方式表示。

参数zone定义一块共享内存区域。此共享区域用来存储各种key相关的状态信息特别是当前的连接数。参数key可以包含text,变量或者是他们的组合,但是不能为空。因为采用了共享内存的方式(关于NGINX共享内存可以参考这篇文章),所以,这些信息被所有的worker进程共用。

通过此参数可以定义共享内存的名字和大小。在上述采用$binary_remote_addr作为key的例子中,所需要的存储空间比速率控制所需要的空间要少,所以在此配置下,相同大小的内存存储的节点数目要把速率控制的节点数目多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值