限流保护——nginx限流模块
1.限制请求次数——limit_req_zone模块
a.意义:limit_req_zone 表示限制单位时间内的请求数,即速率限制,采用的漏桶算法
a.在 conf/nginx.conf 配置文件中添加
http { ...... #限制请求次数参数 limit_req_zone $binary_remote_addr zone=one:10m rate=5r/m; ...... server { ...... location /printProducer { ...... #限制请求次数 limit_req zone=one burst=10 nodelay; #自定义返回码 limit_req_status 598; ...... }
b.参数说明:
$binary_remote_addr:表示通过remote_addr这个标识来限制同一客户端ip请求数
zone=one:10m:表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息
rate=5r/m:表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如1r/s
zone=one:表示使用哪个配置区域来做限制,与上面 limit_req_zone 里的name对应
burst=5:表示设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内
nodelay:如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队
limit_req_status 598:设置拒绝请求的返回值。值只能设置 400 到 599 之间(默认是503)
2.限制下载速度
a.在 conf/nginx.conf 配置文件中添加
http { ...... server { ...... location /download{ ...... #不限速阈值 limit_rate_after 10m; #超过阈值限制速度 limit_rate 10k; ...... }
b.参数说明:
limit_rate_after 10m:表示前 10m 大小时不限速
limit_rate 10k:表示超过 limit_rate_after 后以 10kb/s 限速
3.参考文章:
https://www.cnblogs.com/biglittleant/p/8979915.html
https://my.oschina.net/gaga/blog/495444