在某些情况下需要对请求进行限制,这里表达的或许不太清楚,大概得意思就是限流。之前我们说过限速的配置,主要是对用户请求的速度限制。而这里的限流则是对访问者的限制。前者是响应的限制,后者是请求的限制。那么限流的配置具体怎么做,这块作者还是找到了相关的资料。然后一起学习一下。
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s;
limt_req_zone定义在http模块中,$binary_remote_addr表示保存用户ip地址用二进制形式,Zone表示定义区域的名称,冒号后边的表示ip空间的存储大小。16000个ip地址信息大概为1M,所以这里10M能存储16万的用户ip地址信息。rate表示请求的速率,这里为每秒10个请求。
之后我们需要在我们的想要限流的路由配置中加入如下配置
limit_req zone=mylimit burst=20 nodelay;
这里的burst表示排队大小,nodelay表示不限制单个请求的时间限制。
通过实际检测发现,配置有效。
当然有时候,我们只需要对必要的用户限流,所以白名单是很重要的限流配置。那么不限流地址又如何配置。
#定义限流配置
geo $limit {
default 1;
192.168.21.0/24 0;
}
#将限流地址配置映射到limit_key中
map $limit $limit_key {
1 $binary_remote_addr;
0 “”;
}
#定义限流。
limit_req_zone $limit_key zone=mylimit:10m rate 1r/s;
在需要配置的请求中设置限流
limit_req zone=mylimit burst=1 nodelay;
通过实践,发现限流的白名单效果良好。非白名单的中用户请求速率明显变慢。
参考资料:公众号号《冰河技术》- nginx专题