通过查看nginx官方文档,小弟查看到了三种nginx限流方式。
1、limit_conn_zone
2、limit_req_zone
3、ngx_http_upstream_module
前两种只能对客户端(即单一ip限流),并且文档也很全,但是经过测试发现,还是无法达到官方文档所说的结果(可能小弟的测试方法有问题)。
这里先简单的介绍一下前两种:
1、limit_conn_zone
1.1nginx配置
http{
limit_conn_zone $binary_remote_addr zone=one:10m;
server
{
......
limit_conn one 10;
......
}
}
其中“limit_conn one 10”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效。
该配置表明:客户端的并发连接数只能是10个。
2.2结果
ab工具20并发去请求nginx,可以看到
Complete requests: 20
Failed requests: 9
(由于nginx配置中一个ip并发连接数为10,而结果中成功数为+1的原因未知;nginx的日志中也可以看到有9个请求返回503)
2、limit_req_zone
2.1 nginx配置
http{
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
server
{
......
limit_req zone=req_one burst=120;
......
}
}
其中“limit_req zone=req_one burst=120”既可以放在server层对整个server有效,也可以放在location中只对单独的location有效。
rate=1r/s的意思是每个地址每秒只能请求一次,也就是说令牌桶burst=120一共有120块令牌,并且每秒钟只新增1块令牌,
120块令牌发完后,多出来的请求就会返回503.。