Nginx请求频率限制模块详细说明以及案例
2025-03-09
7
Nginx的请求频率限制模块主要通过ngx_http_limit_req_module
实现,用于限制客户端请求的频率,防止恶意请求或DDoS攻击。
模块配置指令
limit_req_zone
定义共享内存区域,用于存储请求频率的状态。limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
$binary_remote_addr
:基于客户端IP地址进行限制。zone=one:10m
:定义名为one
的共享内存区域,大小为10MB。rate=1r/s
:限制请求速率为每秒1个请求。limit_req
在特定位置或服务器块中应用请求频率限制。location /api/ { limit_req zone=one burst=5 nodelay; }
zone=one
:引用limit_req_zone
定义的共享内存区域。burst=5
:允许突发5个请求。nodelay
:立即处理突发请求,不延迟。limit_req_status
定义当请求被拒绝时返回的HTTP状态码,默认是503。limit_req_status 429;
limit_req_log_level
定义记录请求被拒绝时的日志级别,默认是error
。limit_req_log_level warn;
案例
假设需要限制客户端每秒最多请求1次,允许突发5个请求,并立即处理突发请求。
在
http
块中定义共享内存区域:http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; }
在
location
块中应用限制:server { location /api/ { limit_req zone=one burst=5 nodelay; proxy_pass http://backend; } }
配置日志级别和状态码(可选):
http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; limit_req_status 429; limit_req_log_level warn; }
解释
客户端每秒最多请求1次,超过限制的请求会被延迟或拒绝。
burst=5
允许突发5个请求,nodelay
表示立即处理突发请求。如果请求被拒绝,返回429状态码,并记录警告日志。
通过以上配置,可以有效防止恶意请求或DDoS攻击。
本篇文章内容来源于:Nginx请求频率限制模块详细说明以及案例
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。