两行代码搞定呀

头上加这句,意思是每秒最多15次 (包括各种请求,例如ajax,例如img的src,如果给的过少会导致上述请求返回503,另外这里的单位也可以改每分钟 例如60r/m

  1.  http {
  2.     limit_req_zone $binary_remote_addr zone=one:16m rate=15r/s; 
  3.     ......
  4.  }

 

 余下要在server里加 limit_req zone=one burst=10 nodelay

zone=one :设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应

burst=10:重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为10的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内等待,但是这个等待区里的位置只有10个,超过的请求会直接报503的错误然后返回。

nodelay:

  • 如果设置,会在瞬时提供处理(burst + rate)个请求的能力,请求超过(burst + rate)的时候就会直接返回503,永远不存在请求需要等待的情况。(这里的rate的单位是:r/s)

  • 如果没有设置,则所有请求会依次等待排队

  1. server {
  2.     listen       80;
  3.     server_name  www.xxx.com;
  4.     location / {
  5.         limit_req zone=one burst=10 nodelay;
  6.         ...
  7.     }
  8. }

 

结束以后必须重启nginx才会生效

  1.  sudo systemctl restart nginx


完成以后如果同一个ip在反复请求次数过于频繁时,会请他跳转到503错误页面,之后还会更新自定义美化nginx的错误页面