nginx可以限制单个ip一段时间的请求次数。比如同一ip,1秒限制10次请求。
设置limit_req_zone和limit_req参数,如下例,1秒限制10次请求。
http{
...
limit_req_zone $binary_remote_addr zone=allips:10m rate=10r/s;
...
server{
...
location {
...
limit_req zone=allips burst=5 nodelay;
...
}
...
}
...
}
rate=10r/s,代表一秒钟接收10次请求,超过的返回503错误。burst=5代表缓冲请求数为5,比如设置1秒10个请求,实际1秒钟进来20个请求,nginx会立即处理10个,缓存5个,剩下5个直接503错误。
如果设置了nodelay参数,会直接执行缓存的5个。也就是说1秒执行了15个,但是下一秒只能执行5个,下一秒如果超过5个的请求会503。
如果没有设置nodelay,会严格执行1秒10个,缓存的5个会在一秒执行,就是会延迟执行。
可以使用ab命令进行压力测试(例如:100个请求,10个并发)
ab -n 100 -c 10 https://pgres.cn/