正在加载中,请稍后
author 首页 关于 笔记

按回车搜索更多

nginx限制单个IP同一时间内访问频率,防止循环访问
2018-08-26 阅读 {{counts.readCount}} 评论 {{counts.commentCount}}


两行代码搞定呀

头上加这句,意思是每秒最多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的错误页面

 

提交
评论区空空如也,赶紧添加一条评论吧 评论 {{counts.commentCount}}
{{comment.name}} {{comment.os}} {{comment.browser}}
{{dateFormatter(comment.createTime)}}

{{comment.message}}

{{comment.reply.name}} {{comment.reply.os}} {{comment.reply.browser}}
{{dateFormatter(comment.reply.createTime)}}

{{comment.reply.message}}

zzzmh
关于我 留言板

网址导航

{{alert.message}}
留言板 * 站长不经常查看信箱 若有重要事宜联系邮箱 admin@zzzmh.cn 取消 发送