前言
本文是对Rate Limiting with NGINX and NGINX Plus的主要内容(去掉了关于NGINX Plus相关内容)的翻译。
限流
(rate limiting)是NGINX
众多特性中最有用的,也是经常容易被误解和错误配置的,特性之一。该特性可以限制某个用户在一个给定时间段内能够产生的HTTP
请求数。请求可以简单到就是一个对于主页的GET
请求或者一个登陆表格的POST
请求。
限流
也可以用于安全目的上,比如减慢暴力密码破解攻击。通过限制进来的请求速率,并且(结合日志)标记出目标URLs
来帮助防范DDoS
攻击。一般地说,限流是用在保护上游应用服务器不被在同一时刻的大量用户请求湮没。
下面介绍NGINX
限流的基本用法。
NGINX限流是如何工作的
NGINX
限流使用漏桶算法
(leaky bucket algorithm),该算法广泛应用于通信和基于包交换计算机网络中,用来处理当带宽被限制时的突发情况。和一个从上面进水,从下面漏水的桶的原理很相似;如果进水的速率大于漏水的速率,这个桶就会发生溢出。
在请求处理过程中,水代表从客户端来的请求,而桶代表了一个队列,请求在该队列中依据先进先出(FIFO)
算法等待被处理。漏的水代表请求离开缓冲区并被服务器处理,溢出代表了请求被丢弃并且永不被服务。