nginx的限速,漏桶算法跟令牌桶算法

本文介绍了Nginx中的漏桶算法和令牌桶算法。漏桶算法可设置共享内存区域和请求最大突增大小,会使部分请求延迟,可通过参数调整;令牌桶算法每秒生成令牌,请求拿到令牌才处理,一个请求可拿多个令牌,以此控制带宽。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

漏桶算法

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    ...

    server {

        ...

        location /search/ {
            limit_req zone=one burst=5;
        }

limit_req
设置共享内存区域和请求的最大突增大小。
语法:limit_req zone=name [burst=number] [nodelay | delay=number];
默认值:-
位置:http, server, location
如上配置通俗解释如下图:
在内存中申请10m区域存放数据,限制每秒只能处理1个请求,最大突增大小为5,这里引入了桶的概念。客户端并发发送请求后,第一个请求可以正常处理,后续请求有5个会进入到桶中,而有更多的请求将在桶外等待排队。当第一个请求处理完毕,桶中的请求继续流出一个,这时桶里剩下4个请求等待处理,而桶外又会再次有请求进入直到桶中有五个请求。流出一个,流入一个。
在这里插入图片描述
这样做会导致很多请求会有延迟,如果不想有过多延迟可以加入nodelay参数

limit_req zone=one burst=5 nodelay;

delay 参数 指定过多请求延迟的限制。默认值为零,即所有过多的请求都延迟

令牌桶算法

http {
	limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
}

locatin / {
	limit_req  zone=one burst=5 nodelay;
	...
}

漏桶算法中rate=1r/s表示每秒接收1个请求,而在令牌桶中,此处代表每秒中会生成一个令牌放到桶中。
在这里插入图片描述
请求拿到令牌后才会进行下一步处理,如果桶中已经没有令牌则请求不会处理。
一个请求还可以拿到多个令牌,比如一个令牌代表限制的带宽为100m,此时桶中有四个令牌,第一个客户发送的请求拿到了三个令牌,那此时他的带宽就为300m,第二个客户发送请求,只拿到了一个令牌,那么第二个客户的带宽便只有100m。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值