返回博客

Node.js 停止维护时间表:Node 20 已 EOL,以及 2026 年 10 月安全更新

Node.js 各版本线及其停止维护日期,2026 年 10 月 21 日安全更新修复了什么,以及怎么找出所有还在运行旧版 Node 的地方。

2026年10月22日SiteXraySiteXray
Node.js 停止维护时间表:Node 20 已 EOL,以及 2026 年 10 月安全更新

Node.js 20 已于 2026 年 4 月 30 日停止维护。 半年后的 2026 年 10 月 21 日,Node.js 官方为 26.x、24.x 和 22.x 发布安全更新,修复了 10 个漏洞,其中 4 个为高危。Node 20 没有补丁,以后也不会有。

Node.js 停止维护日期

偶数版本会进入长期支持(LTS),总共维护大约 30 个月;奇数版本生命周期很短。

版本状态(2026 年 10 月)停止维护
Node.js 26Current,2026 年 10 月起进入 Active LTS2029 年 4 月 30 日
Node.js 24Active / Maintenance LTS2028 年 4 月 30 日
Node.js 22Maintenance LTS2027 年 4 月 30 日
Node.js 20已停止维护2026 年 4 月 30 日
Node.js 18已停止维护2025 年 4 月 30 日
Node.js 16 及更早已停止维护

规划升级前,请在 nodejs.org/en/about/previous-releases 查看最新的时间表。

2026 年 10 月 21 日的更新修复了什么

  • CVE-2026-111497:Brotli 解码器越界写入。 官方公告称可导致远程代码执行。任何会解压攻击者可控 Brotli 数据的服务(抓取不可信 URL 的 HTTP 客户端、代理、上传接口)都受影响。
  • TLS 主机名校验绕过。 多个问题可能让错误主机的证书被接受,削弱了服务器对其他服务发起的 HTTPS 调用的安全性。
  • DNS 查询相关问题,以及 c-ares、OpenSSL(22.x 和 24.x)、SQLite(22.x)和 Undici 的依赖更新。

据报道,本次的修复版本是 26.12.1、24.22.1 和 22.23.4。锁定版本之前,请对照官方公告确认。

旧版 Node 藏在哪里

你电脑上的 node -v,很少就是线上真正在跑的那个版本。每次安全更新之后,逐一检查这些地方:

  • Docker 镜像。 Dockerfile 里的 FROM node:20-alpine 会一直打包 Node 20,直到有人改它。即使大版本不变也要重新构建镜像,因为 node:22-alpine 这类标签只有在重新拉取并构建时才会用上修复。
  • 平台的运行时设置。 Vercel、Netlify、Render、Railway、AWS Lambda 等平台每个项目都有 Node 版本设置。有些会自动升级小版本,但很少会主动把你从停止维护的大版本迁走。
  • engines 字段和 .nvmrc / .node-version 文件,它们会把 CI 和部署锁在旧的大版本上。
  • 进程管理器和系统包。 PM2、systemd 服务,以及多年前用安装包装进 /usr/local/bin/node 的版本。
  • 跑在另一台服务器上的后台任务,平时没人记得,直到它出问题。

Node.js 不会通过 HTTP 暴露版本号,所以外部扫描无法直接看出版本。网站漏洞扫描器会标记 X-Powered-By: Express 这类框架指纹,这些本来也应该去掉。

从 Node 20 升级

  1. 至少升到 Node 22,最好是 24,后者支持到 2028 年。
  2. 更新原生模块(bcrypt、sharp、better-sqlite3 等),因为它们是针对特定 Node ABI 编译的。
  3. 先在 CI 里用新版本跑测试,再切生产环境;大多数应用从 20 升到 22 或 24 都不需要改代码。
  4. 在同一个 PR 里同时更新 Dockerfile 基础镜像、平台设置和 engines,避免三者不一致。
  5. 部署后在进程内确认实际运行的版本(启动时打印 process.version)。

如果你有很多小服务,最后一步最重要:上次出问题的,往往就是三处只改了两处的那个项目。如果你希望有人代劳,托管运维会在 72 小时内应用 Node.js 安全更新。