在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
相关产品推荐
相关产品推荐

