nginx的限流配置的几种方法实现

 更新时间:2026年04月24日 10:11:17   作者:西门吹雪分身  
Nginx限流功能主要通过漏桶算法实现,包含两个核心模块:limit_req_module限制请求速率,limit_conn_module限制并发连接数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Nginx 的限流功能主要依赖两个核心模块:

  • ngx_http_limit_req_module限制请求速率(基于漏桶算法)
  • ngx_http_limit_conn_module:限制并发连接数

Nginx 主要使用 漏桶算法 (Leaky Bucket),通过 burst 参数模拟突发能力

漏桶模型 (Leaky Bucket)

原理:水流(请求)任意速度注入,桶底以固定速度漏水(处理)。水满则溢出(拒绝)。

   [ 请求流入 ] 
      ⬇️⬇️⬇️
  ┌─────────────┐
  │   桶 (Burst) │ <--- 容量上限 (允许排队的数量)
  │  [水][水][水] │
  └──────┬──────┘
         │ 💧 (固定速率 Rate)
         ▼
   [ 后端服务器 ]
  • Rate (流速):桶底漏水速度。例如 10r/s = 每秒只放行 10 个请求。
  • Burst (容量):桶的大小。例如 burst=20 = 允许额外积压 20 个请求排队。
  • Nodelay (不延迟):
    • 不加:排队的请求要等桶底慢慢漏完才能走(用户感觉卡顿)。
    • 加 nodelay:排队的请求立即放行(只要不超过 Burst 上限),瞬间处理突发流量。

限制请求速率 (limit_req)

这是最常用的限流方式,用于防刷、保护 API

基础配置模板

http {
    # 1. 定义限流区域 (必须在 http 块中)
    # $binary_remote_addr: 基于客户端 IP (二进制格式,节省内存)
    # zone=api_limit: 区域名称
    # size=10m: 共享内存大小 (1MB 约可存储 16000 个 IP 状态)
    # rate=10r/s: 核心速率,每秒允许 10 个请求
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

    server {
        listen 80;
        server_name api.example.com;

        location /api/ {
            # 2. 应用限流规则 (必须在 location 块中)
            # zone=api_limit: 引用上面定义的区域
            # burst=20: 允许突发 20 个请求 (排队容量)
            # nodelay: 突发的请求立即处理,不延迟 (关键参数)
            limit_req zone=api_limit burst=20 nodelay;

            # 可选:自定义拒绝时的返回码 (默认是 503)
            limit_req_status 429; 
            
            proxy_pass http://backend;
        }
    }
}

参数含义示例效果
rate基础流速10r/s = 平均每秒处理 10 个请求。
burst桶容量/缓冲池burst=20 = 允许瞬间进来 30 个请求 (10 个正常 + 20 个突发),超出的才拒绝。
nodelay是否延迟处理不加:超出的 20 个请求会按 rate 的速度排队慢慢处理(用户感觉卡顿)。
加:超出的 20 个请求立即转发给后端(用户感觉流畅,但后端压力瞬间增大)。
(通常防刷都加 nodelay)
key限流维度$binary_remote_addr (按 IP)
$http_authorization (按 Token)
$uri (按接口)

限制并发连接 (limit_conn)

用于防止单个 IP 占用过多连接(如下载站、防 CC 攻击)。

http {
    # 1. 定义连接限制区域
    # 每个 IP 最多允许 10 个并发连接
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    server {
        location /download/ {
            # 2. 应用限制
            # 同一个 IP 同时只能有 10 个连接在下载
            limit_conn conn_limit 10;
            # 超过限制返回 503 或自定义
            limit_conn_status 503;
            proxy_pass http://file_server;
        }
    }
}

全局 + 单 IP 双重限制

既防单个疯子,也防群体攻击

# 定义两个区
limit_req_zone $binary_remote_addr zone=ip:10m rate=10r/s;
limit_req_zone $server_name zone=global:10m rate=1000r/s;

location / {
    limit_req zone=ip burst=20 nodelay;       # 单 IP 限流
    limit_req zone=global burst=100 nodelay;  # 全站总限流
}

调试与监控

查看谁被限流了?

查看 Nginx 错误日志 (error.log):

tail -f /var/log/nginx/error.log | grep "limiting"

输出示例:limiting requests, excess: 20.456 by zone “my_limit” (表示超额了 20 个请求被拒)。

到此这篇关于nginx的限流配置的几种方法实现的文章就介绍到这了,更多相关nginx 限流配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx配置SSL证书的全流程

    Nginx配置SSL证书的全流程

    文章详细介绍了如何通过阿里云或腾讯云申请免费SSL证书,并在Nginx中配置SSL以启用HTTPS,配置包括设置SSL会话缓存、超时、加密套件、优先级以及指定证书和密钥的位置,配置完成后,通过验证语法并重启Nginx,网站将启用HTTPS,用户访问时会看到浏览器地址栏的锁图标
    2025-02-02
  • nginx配置gzip压缩优化传输效率加快页面访问速度的问题

    nginx配置gzip压缩优化传输效率加快页面访问速度的问题

    本文介绍了如何在nginx服务器中配置gzip压缩,通过压缩HTTP响应内容,减少数据传输大小和响应时间,从而提升网站性能和访问速度,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • 简介Nginx中的location匹配规则

    简介Nginx中的location匹配规则

    这篇文章主要介绍了简介Nginx中的location匹配规则,Nginx是一个高速的基于事务的非阻塞服务器,需要的朋友可以参考下
    2015-07-07
  • Nginx服务器作反向代理实现内部局域网的url转发配置

    Nginx服务器作反向代理实现内部局域网的url转发配置

    这篇文章主要介绍了Nginx服务器作反向代理实现内部局域网的url转发实例,文中提到需要注意proxy_read_timeout参数的相关调整,需要的朋友可以参考下
    2016-01-01
  • 使用Nginx搭建文件服务器的全过程

    使用Nginx搭建文件服务器的全过程

    文章介绍了选择Nginx作为文件服务器的原因,包括其高性能、轻量级、高稳定性等优势,以及Nginx的基本配置、高级配置和生产环境配置,文章还详细介绍了如何使用Nginx进行HTTPS配置、防盗链配置、压缩传输等高级功能,需要的朋友可以参考下
    2026-01-01
  • nginx使用ssl模块配置支持HTTPS访问的方法

    nginx使用ssl模块配置支持HTTPS访问的方法

    这篇文章主要介绍了nginx使用ssl模块配置支持HTTPS访问的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 前端nginx部署详细图文教程

    前端nginx部署详细图文教程

    在前端开发过程中经常是需要把前端静态资源放到服务器中看效果,这时经常用到nginx来配置,下面这篇文章主要给大家介绍了关于前端nginx部署的相关资料,需要的朋友可以参考下
    2024-03-03
  • Windows下Nginx的启动停止重启等命令操作过程

    Windows下Nginx的启动停止重启等命令操作过程

    最近在window 上安装了nginx ,对nginx 的操作不是很熟,故在此记录一下常用操作,本文详细介绍了Windows下Nginx的启动,停止,重启等命令,需要的朋友可以参考下
    2024-03-03
  • Python实现批量压缩图片的实用脚本分享

    Python实现批量压缩图片的实用脚本分享

    手机拍摄的4K照片动辄10MB,单反相机拍摄的RAW格式图片更是高达50MB以上,庞大的图片体积会带来诸多困扰,通过Python脚本实现自动化压缩,不仅能精准控制压缩参数,还能批量处理成百上千张图片,本文将通过实际案例,展示如何用50行代码构建高效图片压缩工具
    2026-02-02
  • nginx禁用ip实现方法

    nginx禁用ip实现方法

    Nginx禁特定IP访问的方法包括使用deny指令、组合使用allow和deny指令以及利用HTTP模块的limit_conn和limit_req指令限制连接数和请求频率,这些方法能有效禁止或限制特定IP的访问
    2026-05-05

最新评论