请求Node.js页面时出现net::ERR_TOO_MANY_REDIRECTS错误求助
解决IIS中Node.js页面出现net::ERR_TOO_MANY_REDIRECTS的问题
我来帮你排查这个net::ERR_TOO_MANY_REDIRECTS的问题,结合你提供的web.config片段,大概率是重写规则配置不当或者和Node.js应用的逻辑冲突导致的循环重定向,下面是具体的排查和解决步骤:
1. 补全并修正HTTPS重写规则
从你给出的web.config片段来看,HTTP转HTTPS的重写规则没有写完,这很可能是导致循环的核心原因。正确的规则需要判断当前请求是否已经是HTTPS,同时排除Node.js的入口文件(避免iisnode处理时触发重复重定向)。
修改后的完整重写规则示例:
<rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll"> <!-- 只对HTTP请求进行重定向 --> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> <!-- 排除Node.js入口文件,防止iisnode处理时触发循环 --> <add input="{REQUEST_URI}" negate="true" pattern="^/server/server.js$" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule> <!-- 保留Node.js路由规则,确保请求能正确转发到server.js --> <rule name="Node.js routing" stopProcessing="true"> <match url="/*" /> <action type="Rewrite" url="server/server.js" /> </rule> </rules> </rewrite>
2. 检查Node.js应用内部的重定向逻辑
如果你的server.js代码里自己也实现了HTTP转HTTPS的重定向(比如下面这种),就会和IIS的重写规则形成双向循环:
// 示例:Node.js内部的HTTPS重定向逻辑 if (req.protocol !== 'https') { return res.redirect(`https://${req.headers.host}${req.url}`); }
这种情况下,你需要关闭其中一方的重定向逻辑——要么保留IIS的规则,要么保留Node.js的代码,不要同时启用。
3. 验证IIS站点的绑定配置
- 确保你的IIS站点同时绑定了HTTP(端口80)和HTTPS(端口443),如果只绑定了HTTPS,IIS会无法处理HTTP请求,间接导致重定向异常。
- 检查HTTPS绑定的SSL证书是否有效,证书无效也可能导致浏览器反复尝试重定向。
4. 清除浏览器缓存后测试
浏览器会缓存301永久重定向的规则,即使你修复了配置,旧的缓存可能还会导致循环重定向。建议清除浏览器缓存,或者使用隐私模式打开页面测试。
内容的提问来源于stack exchange,提问作者Sachin Sharma
相关产品推荐
相关产品推荐

