Node.js 最佳实践:使用负载均衡器或中间件为应用实现请求限流(Rate Limiting)
文档教程后端【免费下载链接】nodebestpractices✅ The Node.js best practices list (July 2026)项目地址https://gitcode.com/GitHub_Trending/no/nodebestpractices点击查看免费下载导读本文基于开源仓库 nodebestpractices 的《安全实践》章节原文档sections/security/limitrequests.russian.md整理而成系统讲解如何在 Node.js 应用中实施请求限流rate limiting以抵御 DDoS 攻击、暴力破解与突发流量导致的资源耗尽。读完本文你将掌握两条完整的落地路线一是基于 Redis 的rate-limiter-flexible纯 Node.js 限流方案二是面向 Express.js 的express-rate-limit中间件方案并理解为什么限流任务通常更适合交给 nginx 等专用基础设施来完成。为什么 Node.js 应用必须实现限流核心观点限流必须在你的应用中落地否则应用很容易在同一时间被过多请求压垮。Node.js 是单线程事件循环模型CPU 与连接处理能力有限当并发请求超出承载能力时轻则响应延迟飙升重则进程崩溃、服务不可用真实用户因此获得降级甚至不可用的服务体验——这正是拒绝服务Denial of Service攻击的典型后果。关于这一结论仓库主文档 README.md 的第 6.2 条给出了同样明确的警示要点TL;DRDoS 攻击非常普遍且实施成本低。应使用外部服务云负载均衡器、云防火墙、nginx、rate-limiter-flexible包或对于规模较小、非关键的应用限流中间件如express-rate-limit来实施限流。不这样做的后果Otherwise应用可能遭受攻击导致拒绝服务真实用户获得降级或不可用的服务。主文档将该实践标记为 OWASP Threats ——DDOS说明限流是安全纵深防御中直接对应 DDoS 威胁面的关键控制点。这一点在仓库的 通用安全最佳实践 中也有呼应——其 OWASP A6安全配置错误清单明确要求使用 HTTP(S) 和 TCP 负载均衡器防御 DDoS 攻击。方案选型基础设施级限流 vs 应用内限流原文档明确指出限流是一个任务最好交给为此设计的专用服务来执行。两类方案定位不同方案代表实现适用场景特点基础设施级nginx、云负载均衡器、云防火墙生产环境、高流量、需要全局限流在请求到达应用前拦截性能开销极小天然分布应用内中间件/包rate-limiter-flexible、express-rate-limit中小应用、按路由/业务定制限流灵活可按 IP、用户名、路径等维度精细化控制两者的关系不是二选一而是纵深防御的两层基础设施先挡掉最粗粒度的洪峰应用内再针对/login、/api等敏感路由做精细化限制。代码示例一纯 Node.js rate-limiter-flexible Redis原文档给出的第一种落地方式是使用 rate-limiter-flexible 包在不依赖 Express 框架的纯 Node.js HTTP 服务中实现限流const http require(http); const redis require(redis); const { RateLimiterRedis } require(rate-limiter-flexible); const redisClient redis.createClient({ enable_offline_queue: false, }); // Maximum 20 requests per second const rateLimiter new RateLimiterRedis({ storeClient: redisClient, points: 20, duration: 1, blockDuration: 2, // block for 2 seconds if consumed more than 20 points per second }); http.createServer(async (req, res) { try { const rateLimiterRes await rateLimiter.consume(req.socket.remoteAddress); // Some app logic here res.writeHead(200); res.end(); } catch { res.writeHead(429); res.end(Too Many Requests); } }) .listen(3000);参数与原理逐项拆解enable_offline_queue: false禁用 Redis 客户端的离线队列。当 Redis 暂时不可用时请求不会在本地排队等待而是立刻失败从而避免Redis 挂了应用也跟着挂的连锁故障。points: 20时间窗口内允许消费的额度即允许的请求数。duration: 1时间窗口长度为 1 秒。二者组合即每秒最多 20 个请求。blockDuration: 2一旦在 1 秒内消耗超过 20 点则封禁 2 秒。封禁期间所有来自该 IP 的请求都会被直接拒绝这是区别于单纯限速的拉黑机制能更有效地压制恶意流量。rateLimiter.consume(req.socket.remoteAddress)以客户端 IP 为 key 消费额度。调用成功返回rateLimiterRes继续执行业务逻辑额度耗尽时consume会抛异常进入catch分支。响应码429 Too Many RequestsHTTP 标准中专门用于请求过于频繁的状态码客户端与上游基础设施都能据此识别限流触发。原文档英文版sections/security/limitrequests.md使用ioredis客户端enableOfflineQueue: false俄文版使用官方redis客户端enable_offline_queue: false。两者 API 对应实际项目按已引入的 Redis 客户端选其一即可限流器本体RateLimiterRedis的配置完全一致。分布式语义由于限流计数器存储在 Redis 中RateLimiterRedis天然支持多实例共享额度当应用水平扩展为多个 Node.js 进程/容器时所有实例写入同一个 Redis限流阈值在集群层面全局生效这正是它相比进程内计数方案的核心优势。仓库中更复杂的场景可以参考 登录暴力破解防护——它创建了两个限流器一个按用户名 IP组合统计连续失败次数最多 10 次另一个按 IP 统计每日失败总数100 次后封禁 1 天展示了keyPrefix、blockDuration等参数在业务安全场景中的组合用法。代码示例二Express.js 中间件为特定路由限流对于 Express.js 应用原文档推荐使用 express-rate-limit 中间件以极少的代码为指定路由挂载限流const RateLimit require(express-rate-limit); // important if behind a proxy to ensure client IP is passed to req.ip app.enable(trust proxy); const apiLimiter new RateLimit({ windowMs: 15*60*1000, // 15 minutes max: 100, }); // only apply to requests that begin with /user/ app.use(/user/, apiLimiter);关键点说明app.enable(trust proxy)必须当应用部署在反向代理nginx、云负载均衡器之后时Express 默认取 socket 直连地址作为req.ip得到的将是代理的 IP 而非真实客户端 IP限流会全部误判到代理头上。开启trust proxy后Express 才会信任代理转发来的X-Forwarded-For头并正确解析客户端 IP。这是反代场景下限流能否生效的前提条件原文档特别标注了这一点。windowMs: 15*60*1000时间窗口 15 分钟。max: 100窗口内最多允许 100 个请求超出即返回 429。app.use(/user/, apiLimiter)只作用于以/user/开头的路由实现按路径精细化限流其余接口不受影响。这种中间件方案适合规模较小、非关键的应用主文档 README.md 原文亦如此建议生产级场景则应优先考虑 nginx 或云负载均衡器这类基础设施方案。来自 NGINX 博客的行业佐证原文档引用了 NGINX 博客 的权威论述说明限流在安全体系中的多重价值限流可用于安全目的例如减缓暴力破解密码攻击。它可以通过将请求速率限制在真实用户的典型水平并结合日志来帮助防御 DDoS 攻击识别被攻击的目标 URL。更一般地它被用于保护上游应用服务器免受同一时间过多用户请求的冲击。这段论述与仓库的实践相互印证限流既是安全控制防暴力破解、防 DDoS也是容量保护防止上游应用过载崩溃。仓库中与之配套的还有 登录限流实践专门针对/login、/admin等高权限路由的字典攻击防护。实践检查清单综合原文档与仓库证据落地限流时应确认以下几点分层部署生产环境优先用 nginx / 云负载均衡器 / 云防火墙做第一道粗粒度限流应用内再做精细化限流见 README.md。反代场景记得app.enable(trust proxy)否则 IP 识别失效、限流形同虚设。给 Redis 客户端关闭离线队列避免存储层故障传导到应用层enable_offline_queue: false。敏感路由单独收紧/login、/admin等路由的限额应远低于普通 API参考 登录暴力破解防护 的双限流器模型。超限统一返回 429便于客户端与基础设施识别与重试策略匹配。用blockDuration区分限速与封禁对持续超限的 IP 主动拉黑一段时间压制恶意流量。总结限流是 Node.js 生产化安全清单中不可跳过的一环它在基础设施层面由 nginx 或云负载均衡器承担在应用层面由rate-limiter-flexible纯 Node.js Redis支持集群级全局额度和express-rate-limitExpress 路由级中间件落地。原文档提供的两段代码分别覆盖了这两种形态配合仓库中的 登录限流实践 与 通用安全最佳实践即可构成一套从防 DDoS 到防暴力破解的完整限流防护体系。赞分享文档教程后端【免费下载链接】nodebestpractices✅ The Node.js best practices list (July 2026)项目地址https://gitcode.com/GitHub_Trending/no/nodebestpractices点击查看免费下载相关推荐Node.js 最佳实践用中间件或负载均衡器限制并发请求抵御 DoS 攻击Node.js 最佳实践用中间件或负载均衡器限制并发请求抵御 DoS 攻击 Node.js 应用在面对突发流量或恶意攻击时可能因同一时刻涌入过多请求而过载文档教程后端Node.js 安全实践使用中间件与外部服务实现请求限流Rate LimitingNode.js 安全实践使用中间件与外部服务实现请求限流Rate Limiting 导读 请求限流Rate Limiting是保护 Node.js 应文档教程后端Node.js 限流实战指南基于 nodebestpractices 使用均衡器或中间件限制并发请求Node.js 限流实战指南基于 nodebestpractices 使用均衡器或中间件限制并发请求 本篇指南源自开源项目 nodebestpractices文档教程后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

小吃培训试听怎么约:长沙曾食坊小吃培训走访提示

小吃培训试听怎么约:长沙曾食坊小吃培训走访提示

本篇要点:试听先问能不能约;现场看什么最有用;把试听当成核验环节。不动手感受就报名,容易和预期不符。试听是低成本的核验方式,但怎么约、看什么有讲究。本文从走访提示角度说清试听,不排名次,…

2026/10/4 7:54:13 阅读更多 →
长沙早餐培训哪里好?长沙曾食坊小吃培训的品类走访

长沙早餐培训哪里好?长沙曾食坊小吃培训的品类走访

本篇要点:看粥粉包三类出品的节奏安排;看保温与蒸制设备的实操规范;看面点发酵与出餐顺序的练习强度。很多人搜"早餐培训哪里好",其实早餐品类多、出摊早,单看名次意义不大。长沙早餐以粉面、包点、粥品为主…

2026/10/4 7:54:13 阅读更多 →
真金白银实测数月:2026年三款AI API聚合平台脱颖而出,谁是企业级首选

真金白银实测数月:2026年三款AI API聚合平台脱颖而出,谁是企业级首选

2026 年大模型迭代速度极快,GPT、Claude、Gemini 的新版本几乎每月都有更新,开发者对 API 聚合平台的需求也水涨船高。笔者花了几个月时间真金白银实测市面主流平台,从众多选手中筛出三家,覆盖企业级、学生党与中小团队三类人群&a…

2026/10/4 7:54:13 阅读更多 →

最新新闻

“魔兽世界”C++大作业:面向对象类设计与多态实战解析

“魔兽世界”C++大作业:面向对象类设计与多态实战解析

拿到这个题目的时候,我第一反应是挺感慨的——“魔兽世界(三):开战”几乎算得上C面向对象程序设计课程的“期末保留节目”了。作为一个每年都能在论坛和课程群里看到无数版本的老题目,它最大的价值不在于“魔兽世界”四…

2026/10/4 9:02:11 阅读更多 →
Brinson多期归因模型Python实现:从单期分解到Carino平滑

Brinson多期归因模型Python实现:从单期分解到Carino平滑

前阵子有个做FOF的朋友拿一份基金经理的业绩曲线来找我,问得很直接:“这人去年赚了35%,到底是他行业押得准,还是个股选得好?我该怎么判断?”我说光看净值没用,净值只能告诉你结果,不…

2026/10/4 9:02:10 阅读更多 →
面向 Agent 与开发者的 MiaoYan 仓库工程指南:构建、测试、CI 与高风险区域全解析

面向 Agent 与开发者的 MiaoYan 仓库工程指南:构建、测试、CI 与高风险区域全解析

桌面应用CLI 【免费下载链接】MiaoYan ⛷ Lightweight Markdown app to help you write great sentences. 项目地址: https://gitcode.com/gh_mirrors/mi/MiaoYan 点击查看 免费下载 MiaoYan 是一个基于 Swift/AppKit 的轻量级 Markdown 编辑器(macOS 原…

2026/10/4 9:02:09 阅读更多 →
Gotenberg 仓库贡献指南:从模块架构、代码规范到集成测试的完整开发守则

Gotenberg 仓库贡献指南:从模块架构、代码规范到集成测试的完整开发守则

后端开发工具 【免费下载链接】gotenberg A developer-friendly API for converting many document formats into PDF files, and more! 项目地址: https://gitcode.com/gh_mirrors/go/gotenberg 点击查看 免费下载 本文以 Gotenberg 仓库的 AGENTS.md 为核心骨架&…

2026/10/4 9:02:08 阅读更多 →
Huggingface生态下大模型RLHF全流程实战:从SFT到PPO

Huggingface生态下大模型RLHF全流程实战:从SFT到PPO

先泼盆冷水:网上讲RLHF的教程很多,但绝大多数只给了个PPO训练框图,你照着抄完,跑都跑不起来。真正把"Huggingface 大语言模型 RLHF"这条流水线从数据准备、奖励模型训练到策略优化完整跑通的人,少得可怜。…

2026/10/4 9:02:05 阅读更多 →
OpenShell:开源命令行外壳的五层架构与实现细节

OpenShell:开源命令行外壳的五层架构与实现细节

如果你一天里有将近一半的时间待在终端里,可能会发现一件事:真正消耗耐心的往往不是某条命令本身,而是“命令和命令之间的衔接”。最近我一直在做一个小项目,叫OpenShell,目标是做一个开源的命令行外壳,把补…

2026/10/4 9:01:05 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →