nginx访问频率限制
A. nginx 限制ip请求某个url的频率
问题描述:
今天在统计nginx日志中,url访问频率的时候,发现一个接口访问次数远远大于其他的url。于是用tail -f查看实时日志,发现有个ip以每秒3-4次请求这个url。询问开发后,得知是第三方调用的,频率有点高,需要限制一下。
解决:
在nginx的http模块中添加以下配置
rate=1r/s 的意思是每个地址每秒只能请求一次
在server模块中添加一下配置
burst是指一共有5个令牌,发完后,只能根据rate的设定每秒新增一个
reload nginx的配置之后,再次查看日志。可以看到访问频率明显降下来了
B. Nginx中怎么限制某个IP同一时间段的访问次数
#ip limit
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
limit_conn perip 2;
limit_conn perserver 20;
limit_rate 100k;
$binary_remote_addr是限制同一客户端ip地址;
$server_name是限制同一server最大并发数;
limit_conn为限制并发连接数;
limit_rate为限制下载速度;
C. 一文搞懂Nginx限流,原来这么简单
Nginx现在已经是最火的负载均衡之一,在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景。Nginx的限流主要是两种方式:限制访问频率和限制并发连接数。
Nginx中我们使用 ngx_http_limit_req_mole 模块来限制请求的访问频率,基于漏桶算法原理实现。接下来我们使用 nginx limit_req_zone 和 limit_req 两个指令,限制单个IP的请求处理速率。
语法: limit_req_zone key zone rate
按上面的配置在流量突然增大时,超出的请求将被拒绝,无法处理突发流量,那么在处理突发流量的时候,该怎么处理呢?Nginx提供了 burst 参数来解决突发流量的问题,并结合 nodelay 参数一起使用。burst 译为突发、爆发,表示在超过设定的处理速率后能额外处理的请求数。
burst=20 nodelay 表示这20个请求立马处理,不能延迟,相当于特事特办。不过,即使这20个突发请求立马处理结束,后续来了请求也不会立马处理。burst=20 相当于缓存队列中占了20个坑,即使请求被处理了,这20个位置这只能按 100ms一个来释放。这就达到了速率稳定,但突然流量也能正常处理的效果。
Nginx 的 ngx_http_limit_conn_mole 模块提供了对资源连接数进行限制的功能,使用 limit_conn_zone 和 limit_conn 两个指令就可以了。
好了,以上几种限流方式,你都清楚了吗?