当前位置: 首页 > news >正文

nginx的限流配置

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_addrzone=api_limit:10mrate=10r/s;server{listen80;server_name api.example.com;location /api/{# 2. 应用限流规则 (必须在 location 块中)# zone=api_limit: 引用上面定义的区域# burst=20: 允许突发 20 个请求 (排队容量)# nodelay: 突发的请求立即处理,不延迟 (关键参数)limit_reqzone=api_limitburst=20nodelay;# 可选:自定义拒绝时的返回码 (默认是 503)limit_req_status429;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_addrzone=conn_limit:10m;server{location /download/{# 2. 应用限制# 同一个 IP 同时只能有 10 个连接在下载limit_conn conn_limit10;# 超过限制返回 503 或自定义limit_conn_status503;proxy_pass http://file_server;}}}

全局 + 单 IP 双重限制

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

# 定义两个区limit_req_zone$binary_remote_addrzone=ip:10mrate=10r/s;limit_req_zone$server_namezone=global:10mrate=1000r/s;location /{limit_reqzone=ipburst=20nodelay;# 单 IP 限流limit_reqzone=globalburst=100nodelay;# 全站总限流}

调试与监控

查看谁被限流了?

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

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

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

http://www.jsqmd.com/news/461855/

相关文章:

  • 反序列化漏洞深度解析(第一期):基础认知与原理拆解
  • 海南传统美食推荐:2026年三亚本地海鲜店必吃食谱
  • 医疗系统如何解决PDF文档粘贴乱码?
  • 基于留出法、K折交叉验证和留一法的多种机器学习模型分类对比(MATLAB实现)包含决策树、...
  • mysql报错1267 - Illegal mix of collations解决方法
  • 展望2026:年度发膜排行榜预测与黑马推荐 - 博客万
  • 嵌入式项目总结,几个嵌入式的项目。 说明文档+项目要求+实现方案+软件思路+软件代码+相关资料
  • 全功能开源拍卖系统源码 覆盖多场景,一站式搭建线上拍卖平台
  • 手把手教你拿AI Offer!从技能到Offer的完整攻略(附项目+面试)
  • postgresql管理-pg_hba.conf 文件详解管理
  • 游戏行业高防服务器应用解析
  • 2026新版Android Studio依赖framework.jar来实现对系统隐藏API的调用
  • 打开网站显示后台图片上传提示:”上传失败:存储目录创建失败!“错误怎么办|已解决
  • 文昌人气海鲜店推荐2026年文昌高性价比海鲜餐厅排行榜
  • 国家卫健委定调“十五五”!四大核心要点重塑医疗IT新版图(附技术落地指南)
  • 大龄程序员抓住AI风口:月薪30K+大模型岗位批量诞生,4个月转型实战指南!为啥要转行大模型AI大模型?
  • 什么是ADHD运动干预?主要有哪些适用于社交障碍与注意力提升的策略?
  • AI智能体在医疗领域有哪些具体的成功案例?能否详细介绍其技术实现路径
  • YOLO模型安装、数据准备及其初始用
  • 为什么打开网站总显示‘危险’?3步教你快速排查!
  • 三级密码产品怎么选?服务器密码机与云服务器密码机的决策模型
  • 人工灯检漏检率0.5%赔了15万?我用Java+YOLO+OpenCV干到1秒60瓶,漏检率0.005%
  • 手把手拆解ANSYS桥梁建模:从鱼刺骨到静力分析
  • 新网站谷歌什么时候给排名:从抓取到出排名的真实节奏
  • Windows 系统下 Ollama 安装 OpenClaw 完整教程
  • 灵活定制,高效运营 拍卖系统源码如何满足不同规模企业需求
  • 搭建Nextcloud(一):基础环境搭建
  • 计算机系统基础知识(五):硬件篇之外部设备详解
  • 工牌集成心率监测的技术实现与测试场景应用
  • 闲置卡片处理记:天猫享淘卡一千元面值回收全过程 - 猎卡回收公众号