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

一、安装 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