nginx限制单个IP同一时间内访问频率,防止循环访问
2018-08-26
阅读 {{counts.readCount}}
评论 {{counts.commentCount}}
两行代码搞定呀
头上加这句,意思是每秒最多15次 (包括各种请求,例如ajax,例如img的src,如果给的过少会导致上述请求返回503,另外这里的单位也可以改每分钟 例如60r/m
- http {
- limit_req_zone $binary_remote_addr zone=one:16m rate=15r/s;
- ......
- }
余下要在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)
如果没有设置,则所有请求会依次等待排队
- server {
- listen 80;
- server_name www.xxx.com;
- location / {
- limit_req zone=one burst=10 nodelay;
- ...
- }
- }
结束以后必须重启nginx才会生效
- sudo systemctl restart nginx
完成以后如果同一个ip在反复请求次数过于频繁时,会请他跳转到503错误页面,之后还会更新自定义美化nginx的错误页面
评论区空空如也,赶紧添加一条评论吧
评论 {{counts.commentCount}}
{{comment.name}}
{{comment.os}}
{{comment.browser}}
{{comment.reply.name}}
{{comment.reply.os}}
{{comment.reply.browser}}