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

在IIS服务器部署Node.js+React项目时API无法正常工作

IIS部署Node.js+React应用API故障排查

一、排查API路由与IIS重写规则冲突

  • 前端路由和API路由易被IIS重写规则混淆,需确保非API路径才转发到React的index.html,API请求直接交给Node.js处理。假设API前缀为/api,重写规则需排除该路径:
<rule name="React Routes" stopProcessing="true">
  <match url="^(?!api).*$" /> <!-- 排除/api开头的请求 -->
  <conditions logicalGrouping="MatchAll">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  </conditions>
  <action type="Rewrite" url="/public/my-app/index.html" />
</rule>
  • 同时添加专门的API转发规则:
<rule name="Node API" stopProcessing="true">
  <match url="^api/(.*)$" />
  <action type="Rewrite" url="index.js" />
</rule>

二、验证web.config核心配置

  • 确认已安装IIS Node模块,且handlers节点正确映射Node.js入口:
<handlers>
  <add name="iisnode" path="index.js" verb="*" modules="iisnode" />
</handlers>
  • 403错误多与权限相关:检查IIS应用池身份(建议设为LocalSystem或具备读写权限的用户),确保其能访问Node.js文件及public目录。
  • 配置iisnode节点指定Node.js路径(非默认安装时)及日志目录,方便排查:
<iisnode nodeProcessCommandLine="C:\Program Files\nodejs\node.exe" logDirectory="iisnode-log" />

三、检查Node.js应用路径与端口配置

  • 确保静态文件服务路径正确指向React构建目录:
const path = require('path');
app.use(express.static(path.join(__dirname, 'public', 'my-app')));
  • API路由前缀需与web.config重写规则匹配,比如API路由为/api/users,则web.config匹配规则需对应^api/(.*)$,避免路径不匹配。
  • Node.js应用需监听IIS分配的端口,不要硬编码固定端口:
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

四、定位403错误具体原因

  • 查看IIS日志(默认路径C:\inetpub\logs\LogFiles),找到403错误对应的请求,根据错误代码(如403.1为执行权限被拒、403.2为读权限被拒)针对性修复。
  • 检查public/my-app目录的NTFS权限,确保应用池身份用户拥有读取权限。
  • 若使用ChatGPT提供的web.config,重点排查路径配置(如重写URL指向的文件是否存在)、handlers节点是否正确配置iisnode模块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:12:43