Nginx 服务器可帮助我们实现对单个ip的请求速率限制
具体实现如下
http{
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
...
server{
location/search/{
limit_req zone=one burst=5;
}
limit_req_zone $session_variable zone=name_of_zone:size rate=rate 这句是设置存储session的区域 大小 并设置速率限制
$session_variable 意思是摄者session存储的值key值 我们以$binary_remote_addr(用户ip)为key
zone 意思是设置存储key的区域名称
size 意思是区域大小 此处设置是10MB ,1 MB区域可容纳大约16000个此大小的状态。
rate 意思是设置限制的速率 1r/s => 是1秒 一个请求 2r/s=> 两秒一个 2r/m=>一分钟两个(具体看自己需求)
设置好之后在server区域的location中 开启当前命中区域的限制 limit_req zone=one ; 如此即可实现
#限制每ip每秒不超过10个请求,爆发数burst为5#brust的意思就是,如果第1秒、2,3,4秒请求为9个,
#第5秒的请求为15个是被允许的。
# 但是如果你第1秒就15个请求,第2秒超过10的请求返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,#第1秒5个请求时,5个请求放到第2秒执行,
#设置nodelay,15个请求将在第1秒执行。