参考资料

  1. Nginx在Web开发中的应用
  2. 如何防止SQL注入和XSS攻击?
  3. Nginxlocalhost 路由匹配规则详细说明以及案例
  4. nginx -g详细说明以及案例
  5. Nginx TCP/UDP代理详细说明以及案例
  6. Nginx的配置与管理
  7. Nginxrewrite重定向配置详解
  8. CGI(Common Gateway Interface,通用网关接口)详细说明以及案例

Nginx的请求频率限制模块主要通过ngx_http_limit_req_module实现,用于限制客户端请求的频率,防止恶意请求或DDoS攻击。

模块配置指令

  1. limit_req_zone
    定义共享内存区域,用于存储请求频率的状态。

    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    • $binary_remote_addr:基于客户端IP地址进行限制。

    • zone=one:10m:定义名为one的共享内存区域,大小为10MB。

    • rate=1r/s:限制请求速率为每秒1个请求。

  2. limit_req
    在特定位置或服务器块中应用请求频率限制。

    location /api/ {
        limit_req zone=one burst=5 nodelay;
    }
    • zone=one:引用limit_req_zone定义的共享内存区域。

    • burst=5:允许突发5个请求。

    • nodelay:立即处理突发请求,不延迟。

  3. limit_req_status
    定义当请求被拒绝时返回的HTTP状态码,默认是503。

    limit_req_status 429;
  4. limit_req_log_level
    定义记录请求被拒绝时的日志级别,默认是error

    limit_req_log_level warn;

案例

假设需要限制客户端每秒最多请求1次,允许突发5个请求,并立即处理突发请求。

  1. http块中定义共享内存区域:

    http {
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    }
  2. location块中应用限制:

    server {
        location /api/ {
            limit_req zone=one burst=5 nodelay;
            proxy_pass http://backend;
        }
    }
  3. 配置日志级别和状态码(可选):

    http {
        limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
        limit_req_status 429;
        limit_req_log_level warn;
    }

解释

  • 客户端每秒最多请求1次,超过限制的请求会被延迟或拒绝。

  • burst=5允许突发5个请求,nodelay表示立即处理突发请求。

  • 如果请求被拒绝,返回429状态码,并记录警告日志。

通过以上配置,可以有效防止恶意请求或DDoS攻击。

声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。