Ngnix 限流策略的使用

2023/04/30 更新 1 次 更新于 2026/08/08 Ngnix 共 979 字,约 3 分钟

Ngnix 限流策略的使用

1、限制访问频率

按请求速率限速模块使用的是漏桶算法,即能够强行保证请求的实时处理速度不会超过设置的阈值

语法:limit_req_zone key zone rate

# 定义限流策略:在 nginx.conf 中的 http 模块内加上限流
limit_req_zone $binary_remote_addr zone=contentRateLimit:10m rate=2r/s;

# 使用限流策略:可以针对特地接口限流,在 location 内配置
limit_req zone=contentRateLimit burst=5 nodelay;

burst = 5,这个配置的意思是设置一个大小为 5 的缓冲区(队列)当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回 503,如果没有设置,则所有请求会等待排队。

2、限制最大连接数

语法:limit_conn_zone key zone

# 定义限流策略,在 nginx.conf 中的 http 模块内加上限流
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

# 使用限流策略:可以针对特地接口限流,在 location 内配置
limit_conn perip 10;         # 单个客户端ip与服务器的连接数
limit_conn perserver 100;    # 限制与服务器的总连接数

key:定义限流对象,binary_remote_addr 是一种 key,表示基于 remote_addr (客户端 IP)来做限流,binary_ 的目的是压缩内存占用量。 zone:定义共享内存区存储访问信息, contentRateLimit: 10m 表示一个大小为 10M,名字为 contentRateLimit 的内存区域。1M 能存储 16000 IP 地址的访问信息,10M 可以存储 16W IP 地址访问信息。 rate:用于设置最大访问速率,rate = 2r/s 表示每秒最多处理 2 个请求。nginx 实际上以毫秒为粒度来跟踪请求信息,因此 2r/s 实际上是限制:每 100 毫秒处理一个请求。这意味着,自上一个请求处理完后,若后续 100 毫秒内又有请求到达,将拒绝处理该请求。

Search

    Table of Contents