导读:本期聚焦于印尼程序员创作的《如何在 Windows Server 上稳定部署 Node.js 应用?完整步骤与常见坑解析》,敬请观看详情。把 Node.js 应用从本地搬到 Windows Server 上跑,听起来简单,实际操作时总会遇到各种问题:服务开机不自启、端口被占用、日志没地方看、IIS 转发后请求出不来。这篇文章从安装包选择、环境变量配置讲起,重点介绍用 NSSM 或 PM2 把 Node 应用注册成 Windows 服务的方法,并演示如何借助 IIS 的 ARR 模块做反向代理绑定域名。同时整理了防火墙放行、日志滚动、内存占用过高、多版本共存等常见问题的排查思路,帮你把应用在服务器上跑得稳、看得见、管得住。

不少团队的主力服务器还是 Windows Server,而 Node.js 的资料大多围绕 Linux 展开,导致在 Windows 上部署时经常踩坑。其实只要把安装、服务化、反向代理这三步理清楚,Node.js 在 Windows Server 上跑得并不比 Linux 差。下面按实际部署顺序,把每一步的关键点和容易出错的地方讲透。

如何在 Windows Server 上稳定部署 Node.js 应用?完整步骤与常见坑解析

一、安装 Node.js 环境并做好基础配置

去 Node.js 官网下载 LTS 版本的 msi 安装包,建议不要追新版本,LTS 在生产环境更稳。安装时默认路径一般是 C:\Program Files\nodejs\,一路下一步即可,安装器会自动把 node 和 npm 加进系统 PATH。装完之后打开 cmd,执行 node -v 和 npm -v 验证。如果提示找不到命令,多半是环境变量没生效,去系统属性的「环境变量」里确认 Path 中是否包含 C:\Program Files\nodejs\,改完后要重开终端窗口才会生效。

接下来建议修改 npm 的全局安装位置和缓存位置,默认它们落在 C:\Users\你的用户名\AppData\Roaming\npm 这类用户目录下,换成统一的路径更方便管理:

npm config set prefix "D:\nodejs\npm_global"
npm config set cache "D:\nodejs\npm_cache"

然后把 D:\nodejs\npm_global 也加入 Path,否则全局安装的命令行工具找不到。另外要注意,如果服务器需要通过代理访问外网,记得执行 npm config set registry 配置国内镜像源,否则 npm install 卡住是家常便饭。

二、用 NSSM 把 Node 应用注册成 Windows 服务

直接在命令行窗口里跑 node app.js,窗口一关进程就没了,远程桌面断开也可能导致进程退出。生产环境必须把应用注册成 Windows 服务,让它开机自启、崩溃自动拉起。Windows 上常用的方案有两个:NSSM 和 PM2 的 pm2-windows-service。相比之下 NSSM 更轻量、更不容易出幺蛾子,推荐首选。

去官网下载 nssm.exe,解压到 D:\tools\nssm\ 目录,然后以管理员身份打开 cmd,执行:

D:\tools\nssm\win64\nssm.exe install MyNodeApp "C:\Program Files\nodejs\node.exe" "D:\apps\myapp\app.js"
D:\tools\nssm\win64\nssm.exe set MyNodeApp AppDirectory D:\apps\myapp
D:\tools\nssm\win64\nssm.exe set MyNodeApp AppStdout D:\apps\myapp\logs\out.log
D:\tools\nssm\win64\nssm.exe set MyNodeApp AppStderr D:\apps\myapp\logs\err.log
D:\tools\nssm\win64\nssm.exe set MyNodeApp AppRotateFiles 1
net start MyNodeApp

这里有几个容易忽略的细节。第一,服务默认以 SYSTEM 账户运行,如果应用要访问网络共享目录或数据库,可能需要用 set MyNodeApp ObjectName 指定账户。第二,日志文件要开启 AppRotateFiles,否则 Node 应用跑几个月后单个日志文件能涨到几个 G,把磁盘吃满。第三, NSSM 的 stdout 缓冲有延迟,console.log 不一定立刻写入日志,调试时要有耐心。

注册完成后可以在「服务」管理器里看到 MyNodeApp,启动类型设为自动,配合 NSSM 的退出重启策略,进程崩了会自动重新拉起,基本不用人工干预。

三、用 IIS 做反向代理绑定域名和端口

Node 应用一般监听 3000、8080 这类非 80 端口,用户访问时不可能让他们输端口号,也不建议直接让 Node 监听 80 端口(容易和其他服务冲突)。标准做法是用 IIS 做反向代理。先在服务器管理器里安装 IIS 角色,再下载安装 ARR(Application Request Routing)和 URL Rewrite 两个模块,这是 IIS 能做转发的前提。

装好模块后,在 IIS 管理器里选中服务器节点,找到 Application Request Routing,点右侧的 Server Proxy Settings,勾选 Enable proxy。然后新建一个站点绑定你的域名,在该站点的 URL Rewrite 里添加一条入站规则:

<rule name="NodeAppProxy" stopProcessing="true">
  <match url="(.*)" />
  <action type="Rewrite" url="http://127.0.0.1:3000/{R:1}" />
</rule>

这条规则把所有请求原样转发给本机 3000 端口的 Node 进程。做完之后别忘了两件事:一是 Windows 防火墙只放行 80 和 443 端口,3000 端口不要对外暴露;二是如果用了 WebSocket,需要在 web.config 中启用 WebSocket 协议支持,否则实时推送功能会莫名失灵。

四、常见问题排查思路

部署完不等于万事大吉,日常运维中高频出现的问题有这么几类。访问报 502.3,通常是 IIS 转发过去了但 Node 进程没起来,去服务列表确认 MyNodeApp 状态,再看 D:\apps\myapp\logs\err.log 里的报错。请求偶尔超时,检查 ARR 默认的超时时间是 120 秒,但 Node 应用里如果有长连接,需要在反向代理规则里调整 timeout 参数。

内存占用持续上涨,这是 Node 在 Windows 上比较常见的现象,尤其是老版本 Node 配合大量 Buffer 操作时。可以给服务加上 --max-old-space-size 参数限制堆大小,同时在代码层面排查事件监听器泄漏。多项目需要不同 Node 版本时,可以用 nvm-windows 管理版本切换,但要注意切换后 NSSM 服务指向的 node.exe 路径可能变了,需要重新 install 一遍服务。

最后建议给日志目录单独规划磁盘配额,并定期用任务计划程序清理过期日志。整体来说,Windows Server 部署 Node.js 的核心就是「服务化保活 + IIS 转发 + 日志可查」这三件事,把 NSSM 和 ARR 配置固化成文档,后续新应用的部署十几分钟就能搞定。

Node.js部署Windows ServerIIS反向代理修改时间:2026-09-06 11:36:33

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/20260906/51521.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。