Nginx请求限制模块 – ngx_http_limit_req_module


01.nginx的请求限制模块用于限制单个key(关键字)的请求处理速度。

  • 请求限制模块的工作原理:
    • 通过limit_req_zone配置项,在http配置段中定义一个共享内存区域,用来存储不同key的信息。
    • 通过limit_req配置项,在http,server或location配置段中,指定一个对应的共享内存区域。
      • 在指定的共享内存区域中,根据当前计算出的key的信息来限制客户端请求的频率。
  • 请求限制模块的配置项包括:
    • limit_req,指定一个共享内存区域,并且设置请求限制的参数,其格式为:
      limit_req zone=name [burst=number] [nodelay | delay=number];
      • zone,自定义的内存共享区域的名称,对应limit_req_zone中配置的zone。
      • burst,缓冲队列的长度,即保存多少个未处理的请求。
      • nodelay,是否延时处理,如设置为nodelay,则超过请求频率限制同时超出缓冲区的请求会直接返回503。
      • delay,与nodelay相反,额外等待的请求次数。
    • limit_req_dry_run,是否开启干跑模式;如果开启,请求限制不会生效,但共享内存区域的key值会增加。
      • limit_req_dry_run的值为on或者off,默认为off。
      • limit_req_dry_run可以配置在http,server或location配置段中。
    • limit_req_log_level,设置当请求被拒绝时,该日志对应的日志级别;delay的日志级别总是比refuse低一级。
      • limit_req_log_level的值为info,notice,warn和error;默认为error。
      • limit_req_log_level可以配置在http,server或location配置段中。
    • limit_req_status,当请求被拒绝时,返回的状态码。
      • limit_req_status的默认值为503。
      • limit_req_status可以配置在http,server或location配置段中。
    • limit_req_zone,设置共享缓存区域的属性,其格式为:
      limit_req_zone key zone=name:size rate=rate [sync];
      • key,key的名称,通过变量来获取;例如$binary_remote_addr表示以客户端地址的二进制为key。
      • zone,自定义的内存共享区域的名称,对应limit_req中配置的zone。
      • size,缓存取的大小,单位通常为k,m或者g。
      • rate,请求的频率,单位为r/s,比如10r/s表示限制请求频率为每秒10个请求。


02.nginx的请求限制模块的配置示例:

  • vim /opt/Apps/nginx/conf/nginx.conf,在主配置文件的http段中添加如下配置:
limit_req_zone $binary_remote_addr zone=remote_addr_req:10m rate=1r/s;
  • 添加一个名称为remote_addr_req的共享内存区域,其大小为10m;它以客户端的ip地址的二进制为key,限制请求为1秒1个请求。
vim /opt/Apps/nginx/conf/conf.d/main.conf,修改为如下配置:
server {
    listen 80;
    server_name nginx.test.com;
    error_log logs/nginx_test_error.log error;
    access_log logs/nginx_test_access.log main gzip flush=5m;

    location / {
        root html/main;
        index index.html index.htm index.php;
        limit_req zone=remote_addr_req burst=5 nodelay;
    }
}

  • 由于每秒只能处理1个请求,并且缓冲队列为5,并且nodelay,所以一共能处理的请求为6个,即100个请求共失败94个。

  • 失败的请求以error的日志级别输出。
文档更新时间: 2020-03-11 19:48   作者:闻骏