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

无需URL Rewrite,如何将Node.js直接部署至IIS?

Node.js 直接托管在 IIS(无 localhost 中转)的方案

IIS本身没有原生支持Node.js运行时,但微软官方提供的**ASP.NET Core Module(原HttpPlatformHandler)**可以实现类似.NET的直接托管模式——IIS会直接启动Node进程,通过内部套接字而非localhost端口转发请求,无需额外的URL Rewrite中转。

以下是具体实现步骤:

1. 安装必要组件

  • 安装LTS版本的Node.js,确保Node.exe的路径能被IIS进程访问(建议默认路径C:\Program Files\nodejs\)。
  • 安装ASP.NET Core Hosting Bundle(微软官方免费组件),它包含了ASP.NET Core Module V2,负责管理Node进程并处理请求转发。

2. 配置IIS站点

  • 创建新的IIS站点,将物理路径指向你的Node.js项目根目录。
  • 配置应用程序池:
    • 设置.NET CLR版本为无托管代码(无需.NET运行时支持)。
    • 调整应用程序池身份为LocalSystem或具备项目目录读写权限的账户,确保IIS能启动Node进程并访问项目文件。

3. 添加web.config配置

在项目根目录创建web.config,根据你的Node路径和入口文件调整内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <!-- 让所有请求由ASP.NET Core Module处理 -->
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="C:\Program Files\nodejs\node.exe"
                arguments=".\app.js"
                stdoutLogEnabled="true"
                stdoutLogFile=".\logs\node-out.log"
                hostingModel="inprocess">
      <environmentVariables>
        <!-- 让Node应用监听IIS分配的内部端口,无需手动指定固定端口 -->
        <environmentVariable name="PORT" value="%ASPNETCORE_PORT%" />
        <!-- 设置生产环境变量 -->
        <environmentVariable name="NODE_ENV" value="production" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>
  • hostingModel="inprocess":让Node进程运行在IIS工作进程内,更贴近.NET的托管模式(也可使用outofprocess,进程独立但仍无localhost中转)。
  • 提前在项目根目录创建logs文件夹,用于存储Node的输出日志,方便调试。

4. 适配Node.js应用

修改你的Node入口文件,确保监听process.env.PORT而非固定端口:

const http = require('http');
// 优先使用IIS分配的端口, fallback到3000方便本地调试
const port = process.env.PORT || 3000;

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Node.js hosted directly on IIS!\n');
});

server.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

5. 部署与测试

  • 在项目根目录运行npm install --production,安装生产依赖。
  • 启动IIS站点,访问站点域名/IP,验证是否正常返回内容。
  • 如果出现错误,查看logs/node-out.log文件排查问题(比如依赖缺失、权限不足等)。

与IISNode的区别

  • 无需配置URL Rewrite:ASP.NET Core Module直接处理所有请求,不需要通过Rewrite规则转发到localhost端口。
  • 进程管理更贴近.NET:IIS负责Node进程的启动、崩溃自动重启,和托管.NET应用的逻辑一致。
  • 无端口冲突风险:使用内部套接字而非公开的localhost端口,避免端口占用问题。

内容的提问来源于stack exchange,提问作者Lê Tuấn Anh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 19:13:11