Nginx提供了一个叫ngx_http_limit_req_module的模块进行流量控制,该模块使用漏桶算法实现
官方文档参考:Module ngx_http_limit_req_module
配置共享内存空间用来保存key的状态,尤其是当前过量请求个数。key的值可以是文本、变量或者是一个由前面两种类型值组成的比较结果。请求中携带key对应的值如果为空,将不会进行计数
语法:limit_req_zone key zone=name:size rate=rate;
默认值:无
上下文:http
示例:
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
limit_req_zone $binary_remote_addr zone=ten:10m rate=10r/m;
server {
......
说明:
配置了一个名字为ten的共享内存空间(zone=ten)用来保存不同客户端IP地址($binary_remote_addr,比起$remote_addr的优势是占用内存空间固定,IPv4固定占用4字节,IPv6固定占用16字节。在32位系统,每一个IP在32位系统将占用64字节、在64位系统将占用128字节来保存状态。1m空间在32位系统能保存1w6多个IP的状态,在64位系统能保存8k多个IP的状态)的过量请求个数,这个空间占用10m内存(10m)并且平均请求处理速率不能超过每分钟10个请求(rate=10r/m)