You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何关闭Terminal/VSCode后仍保持NextJS应用在Windows Server运行?

解决Windows Server上IIS部署NextJS后关闭终端/VSCode仍运行的问题

你之前直接在终端/VSCode里启动NextJS进程的方式,一旦关闭窗口进程就会终止。要实现后台常驻,核心是把Node进程转为系统级的后台服务,以下是几种可靠方案:

方案一:注册为Windows服务(推荐)

这种方式让进程完全脱离终端,由Windows服务管理器托管,稳定性最高:

  1. 先完成NextJS应用构建:npm run build
  2. 全局安装node-windows工具:npm install -g node-windows
  3. 在项目根目录创建service.js脚本,内容如下:
    const Service = require('node-windows').Service;
    const path = require('path');
    
    const svc = new Service({
      name: 'NextJS-你的应用名称',
      description: '后台运行的NextJS应用服务',
      script: path.join(__dirname, 'server.js') // 指向自定义启动脚本
    });
    
    svc.on('install', () => svc.start());
    svc.install();
    
  4. 编写server.js启动脚本(适配NextJS的生产环境启动):
    const next = require('next');
    const { createServer } = require('http');
    const { parse } = require('url');
    
    const app = next({ dev: false });
    const handle = app.getRequestHandler();
    
    app.prepare().then(() => {
      createServer((req, res) => {
        const parsedUrl = parse(req.url, true);
        handle(req, res, parsedUrl);
      }).listen(3000, () => {
        console.log('> 应用已启动在 http://localhost:3000');
      });
    });
    
  5. 在终端执行node service.js完成服务安装,之后可在「Windows服务管理器」找到该服务,设置为自动启动
  6. 配置IIS反向代理:安装URL重写和ARR模块,创建网站后添加重写规则,将请求转发到http://localhost:3000/{R:1}

方案二:用PM2托管进程

PM2是Node.js进程管理工具,支持Windows环境:

  1. 安装PM2:npm install -g pm2
  2. 构建应用:npm run build
  3. 启动并命名进程:pm2 start npm --name "你的应用名" -- start
  4. 保存进程列表,防止重启丢失:pm2 save
  5. 将PM2注册为Windows服务,实现开机自启:pm2-windows-service install
  6. 同样需要配置IIS反向代理,将请求转发到NextJS的端口(默认3000)

方案三:用iisnode直接托管(集成IIS)

借助iisnode模块让IIS直接管理Node进程,无需额外服务:

  1. 安装对应IIS版本的iisnode模块
  2. 项目根目录创建web.config,配置规则:
    <configuration>
      <system.webServer>
        <handlers>
          <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
        </handlers>
        <rewrite>
          <rules>
            <rule name="跳过调试路径" patternSyntax="ECMAScript" stopProcessing="true">
              <match url="^server.js\/debug[\/]?" />
            </rule>
            <rule name="静态资源转发">
              <action type="Rewrite" url="public{REQUEST_URI}" />
            </rule>
            <rule name="动态请求转发">
              <conditions>
                <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="True" />
              </conditions>
              <action type="Rewrite" url="server.js" />
            </rule>
          </rules>
        </rewrite>
        <iisnode node_env="production" />
      </system.webServer>
    </configuration>
    
  3. 编写和方案一相同的server.js启动脚本,部署到IIS网站后,iisnode会自动启动并维护Node进程,无需手动在终端启动

内容的提问来源于stack exchange,提问作者Kubilay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:15:36