限制Nginx的请求频率

如果有恶意爬虫或大量的恶意攻击访问,你的Nginx服务器可能每秒需要处理大量的垃圾请求,这可能导致服务器负载过大,不能处理正常的请求。

我们可以设置 ngx_http_limit_req_module 限制用户的请求频次,例如每分钟最多30次,如果用户超过了请求次数,给他返回503错误。

配置 HttpLimitReqModule (ngx_http_limit_req_module)

在http段中添加:

这个zone叫one并分配10M内存,我使用变量binary_remote_addr而没有使用$remote_addr,因为$binary_remote_addr占用空间少-64字节。10M大概可以保存160,000条记录,一般规模的网站足够了。如果限制域的存储空间耗尽了,对于后续所有请求,服务器都会返回 503 (Service Temporarily Unavailable)错误。

rate必须是整数,例如:

上面指令只是配置,具体执行的时候需要介绍到另一个指令limit_req,先来看一下limit_req的语法:

该指令可以放置在http,server或者location的上下文里面。推荐放在location中,否则,如果你的网页有大量的图片、css等,那么每个都是一个请求,在这种情况下你可能需要提高限制频率。

例如:

  • 第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应
  • 第二个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区,当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内
  • 第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队

使新配置生效:

测试:快速刷新网页

限制Nginx的请求频率

下面这个配置可以限制特定UA(比如搜索引擎)的访问频率:

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注