插件窝 干货文章 Nginx限流如何配置

Nginx限流如何配置

limit 限制 zone Nginx 67    来源:    2025-04-21

Nginx限流配置指南

Nginx提供了多种限流机制来控制客户端请求速率,保护服务器不被过度请求压垮。以下是主要的限流配置方法:

1. 基于漏桶算法的请求速率限制

使用limit_req_zonelimit_req指令实现:

http {
    # 定义限流区域(10MB内存空间,平均每秒处理1个请求)
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        location /api/ {
            # 应用限流规则
            limit_req zone=one burst=5;
            # burst=5表示允许突发5个请求排队等待
            # nodelay表示不延迟处理,直接拒绝超出限制的请求

            proxy_pass http://backend;
        }
    }
}

2. 基于令牌桶算法的连接数限制

使用limit_conn_zonelimit_conn指令限制并发连接数:

http {
    # 定义连接数限制区域(10MB内存空间)
    limit_conn_zone $binary_remote_addr zone=addr:10m;

    server {
        location /download/ {
            # 每个IP最多5个并发连接
            limit_conn addr 5;

            # 限制下载速度(50KB/s)
            limit_rate 50k;
        }
    }
}

3. 带宽限制

限制客户端下载速度:

location /download/ {
    # 限制单个连接速度为50KB/s
    limit_rate 50k;

    # 前10MB不限速
    limit_rate_after 10m;
}

4. 白名单设置

可以设置某些IP不受限流规则限制:

geo $limit {
    default 1;
    10.0.0.0/8 0;
    192.168.0.0/24 0;
}

map $limit $limit_key {
    0 "";
    1 $binary_remote_addr;
}

limit_req_zone $limit_key zone=req_zone:10m rate=5r/s;

5. 多级限流

可以结合多个限流规则:

http {
    limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
    limit_req_zone $server_name zone=perserver:10m rate=100r/s;

    server {
        location /api/ {
            # 每个IP限制10r/s,整个服务限制100r/s
            limit_req zone=perip burst=20 nodelay;
            limit_req zone=perserver burst=100;
        }
    }
}

6. 限流日志

可以记录被限流的请求:

http {
    log_format limit '$remote_addr - $remote_user [$time_local] '
                   '"$request" $status $body_bytes_sent '
                   '"$http_referer" "$http_user_agent" '
                   '[$limit_conn_status] [$limit_req_status]';

    access_log /var/log/nginx/limit.log limit;
}

注意事项

  1. 限流区域大小(如10m)需要根据预估的IP数量设置,每个IP大约占用64字节
  2. 在生产环境中应先测试限流配置,确保不会误伤正常用户
  3. 可以结合$http_x_forwarded_for处理代理后的真实IP
  4. 对于API服务,可以考虑返回429状态码和友好的错误信息

以上配置可以根据实际需求组合使用,构建适合自己业务场景的限流策略。