LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

nginx正向和反向代理服务器中限制http请求速率设置

admin
2025年6月28日 22:23 本文热度 36

ngx_http_limit_req_module

ngx_http_limit_req_module模块按照定义的key值限制请求处理速率,特别是对来自单个IP请求的速率限制。

limit_req_zone指令

  1. 按key设置一块共享内存存储状态信息、超限请求数量;key可以包含文本、变量、文本和变量的组合。如果请求中的key为空不会计算到请求数量中。
  2. limit_req_zone指令只能设置在http块中。
  3. 语法:limit_req_zone key zone=name:size rate=rate [sync];
  4. 例:limit_req_zone $binary_remote_addr zone=one:10m rate=3r/s;
    • $binary_remote_addr将客户端IP设置为key(按客户端IP限制速率)。
    • zone=one:10m表示区域命名为one,10m内存空间;如果10m空间用完,按最近最少使用原则移除状态数据,如果空间仍然不够就拒绝处理新请求(返回503)。
    • rate=3r/s表示速率为每秒3个请求,单位r/s表示每秒请求数,如果要设置的速率小于1r/s,可以使用r/m单位,表示每分钟请求数。
    • sync用于集群节点间的共享内存数据同步,这里不介绍。

    limit_req指令

    1. limit_req指令用于限制请求速率。
    2. limit_req会设置一块内存区域用于实现/管理速率限制,可以给这块内存设置区域名、空间大小、速率、瞬间最大请求量。
    3. 如果请求速率超过设置,nginx会按设置的速率平滑处理请求(将一些请求延迟处理以达到设置速率)。
    4. 超过瞬间最大请求量以前的请求会被延迟处理,而超过瞬间最大请求量的请求不会被处理,直接返回错误状态码为503,可以用limit_req_status指令自定义错误状态码。
    5. 瞬间最大请求量默认值为0。
    6. 语法:limit_req zone=name [burst=number] [nodelay | delay=number];
      • zone=name设置区域名。
      • burst=number设置瞬间最大请求量。
      • nodelay表示不延迟处理请求。
      • delay=number表示延迟处理的请求数量,默认值为0,即所有超过速率限制的请求都会被延迟。
        7. 只有当前配置块(级别)没有设置limit_req指令时,才会从上一个配置块继承配置。
        8. limit_req指令可以设置多个,如以下配置:限制同个客户端IP的请求速率,同时也限制虚拟主机的请求速率。
      server {
          ...
          limit_req zone=perip burst=5 nodelay;
          limit_req zone=perserver burst=10;
      }

      limit_req_statu指令

      设置拒绝处理的状态码,默认值为503 语法:limit_req_status code;可配置块:http, server, location

      limit_req_log_level指令

      1. 设置拒绝处理和延迟处理的日志级别,延迟处理级别比拒绝处理级别低一级,如imit_req_log_level notice表示拒绝处理为notice级,延迟处理低一级为info。 

      2. 语法 :limit_req_log_level info | notice | warn | error;默认日志级别:error 可配置块:http, server, location

      测试

      测试1. 限制同一IP每秒3个请求,nginx配置:

      limit_req_zone $binary_remote_addr zone=one:10m rate=3r/s;

      server {
          listen       80;
          server_name  xxx.xxx.xxx.xxx;


          location / {
              # 限制速率
              limit_req zone=one;
              root   html;
              index  index.html index.htm;
          }
      }

      1秒钟内启动10个请求,因为速率限制为3r/s,3个请求正常响应,7个请求返回503:



      测试2. 限制同一IP每秒1个请求,瞬间最大请求量为5:
      # 方便查看limit_req限制效果
      log_format main '$time_local,$request,$status,limit_req_status=$limit_req_status';

      access_log /usr/local/nginx/logs/access.log main;


      limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

      server {
          listen       80;
          server_name  xxx.xxx.xxx.xxx;

            
          location /download/ {
           alias /var/www/images/;
           limit_req zone=one burst=5 nodelay;
          }
      }

      本机同时启动15个请求ab -n 15 -c 15 http://127.0.0.1/download/1.jpg,因为本机发起的请求能够第一时间到达nginx服务,客户端jmeter测试可能因网络原因有延迟。速率为1r/s,允许瞬间最大请求5(burst)无延迟处理,15个请求中6个处理成功,9个错误返回503,如下图:


      阅读原文:原文链接


      该文章在 2025/7/1 23:45:05 编辑过
      关键字查询
      相关文章
      正在查询...
      点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
      点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
      点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
      点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
      Copyright 2010-2025 ClickSun All Rights Reserved