IIS子目录重写至不同端口:ASP.NET与Node.js集成问题排查
解决IIS URL Rewrite导致非/api路径404的问题
我仔细看了你的配置和问题描述,问题出在URL Rewrite规则的处理逻辑上——虽然你的规则只匹配api/(.*)路径,但默认情况下,IIS在执行Rewrite规则时,可能会干扰原生ASP.NET请求的处理流程。下面是具体的排查和修复步骤:
问题根源
你当前的Proxy规则没有设置stopProcessing="true",这意味着即使请求不匹配api/(.*),IIS仍可能继续执行后续的Rewrite逻辑(哪怕没有其他规则),导致原生ASP.NET的请求路由被中断,最终返回404。另外,也需要确保规则的匹配逻辑完全符合预期,避免意外拦截非/api请求。
修复后的配置
修改你的<rule>节点,添加stopProcessing="true",并明确匹配模式的语法,确保规则仅作用于目标路径:
<rule name="Proxy" stopProcessing="true"> <match url="api/(.*)" ignoreCase="true" patternSyntax="ECMAScript" /> <conditions> <add input="{HTTP_HOST}" pattern="rev.0970.co.kr" ignoreCase="true" /> </conditions> <action type="Rewrite" url="http://localhost:4000/api/{R:1}" /> </rule>
额外检查项
- 确认你的IIS站点使用的是集成模式的应用程序池,且对应的.NET Framework版本与ASP.NET项目兼容
- 检查站点的处理程序映射,确保
.aspx扩展名已关联到ASP.NET的处理程序(比如System.Web.UI.PageHandlerFactory) - 验证ARR代理功能是否仅针对匹配规则的请求生效,没有全局代理所有请求(ARR的代理设置里,确保“启用代理”是勾选的,但不要设置全局转发)
验证效果
修改配置后,重启IIS站点,测试:
http://rev.0970.co.kr/api/signin应该正常转发到Node.js服务http://rev.0970.co.kr/index.aspx应该由ASP.NET正常处理,不再返回404
内容的提问来源于stack exchange,提问作者sungyong
相关产品推荐
相关产品推荐

