Nginx限流
Nginx限流(Rate Limiting): 是指通过配置 Nginx 来,限制客户端在一定时间内访问服务器的请求频率。
Nginx 限流的核心目标:是控制客户端请求的速率或并发连接数,以保护服务器免受过载或恶意攻击。
比如:通过Nginx限流,可以防止恶意攻击(如DDoS攻击)、或意外流量激增导致服务器过载。
以及,控制流量,确保服务器在承受范围内稳定运行。
Nginx限流原理
Nginx 限流的工作原理:是基于 令牌桶算法(Token Bucket) 实现的。
令牌桶算法是一种灵活且有效的限流算法,它允许一定程度的突发流量,同时又能平滑地限制请求速率。
工作原理,如下图所示:
http { limit_conn_zone $binary_remote_addr zone=conn_zone:10m; server { location /download/ { limit_conn conn_zone 2; proxy_pass http://fileserver; } } }
大致流程,如下:
- 令牌桶算法的核心思想:是维护一个固定容量的“令牌桶”。
- 系统以恒定的速率向令牌桶中放入令牌。
- 每个请求到来时,都需要从令牌桶中获取一个令牌才能被处理。
- 如果令牌桶中没有足够的令牌,则请求会被拒绝或等待。
- 令牌桶的容量限制了可以存储的令牌数量,多余的令牌会被丢弃。