IIS服务器Angular与ASP.NET Core应用CORS异常排查与解决求助
排查与解决IIS上间歇性CORS通信问题
一、先盯紧IIS进程与日志
- 打开任务管理器,实时监控
w3wp.exe的内存和CPU占用。问题出现时如果进程内存飙到2GB以上,基本是CORS模块或相关扩展内存泄漏,导致工作进程瘫了没法处理请求。 - 去
C:\inetpub\logs\LogFiles找IIS日志,筛选问题时段的记录,看有没有500错误或者CORS相关的报错(比如Access-Control-Allow-Origin头丢了、格式不对)。 - 开启IIS的失败请求跟踪规则,抓取问题发生时的请求细节,看看CORS头生成是不是出了岔子。
二、调整应用池回收策略
- 默认IIS应用池回收间隔太长,内存泄漏积累到一定程度就会崩溃。打开IIS管理器找到对应应用池,进入「高级设置」→「回收」:
- 设置固定回收时间(比如4小时),或者设定虚拟内存限制(1.5GB)、私有内存限制(1GB),让IIS自动回收异常进程,不用手动重启。
- 检查「快速失败保护」配置,如果短时间内报错太多,IIS会自动关闭进程,但阈值太高的话触发不了,可把失败请求次数调至5次左右,时间间隔设为5分钟。
三、排查CORS配置的动态问题
- 如果用Web.config配置CORS,别在API代码里重复添加
Access-Control-Allow-Origin头,很容易冲突导致规则失效。正确的静态配置示例:<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="https://你的Angular域名.com" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Content-Type, Authorization" /> </customHeaders> </httpProtocol> </system.webServer> - 要是代码里有动态修改CORS规则的逻辑,检查是否存在资源未释放、缓存异常的情况,这会导致运行数小时后规则失效。
四、检查连接池与网络
- 查看应用池的「连接限制」(高级设置内),别把最大连接数设得过低,队列长度不足的话,时间久了连接会耗尽,新请求无法处理。
- 检查服务器防火墙或监控工具,有没有会话超时、连接被强制断开的情况,尤其是Angular和API之间的长连接场景。
五、更新组件补丁
- 检查IIS CORS模块版本,旧版本可能存在已知的内存泄漏BUG,更新到最新版本试试。
- 如果API基于.NET开发,确保.NET Framework或.NET Core运行时是最新状态,打全补丁,不少旧版本会存在进程异常的问题。
内容的提问来源于stack exchange,提问作者Muhammad Israr
相关产品推荐
相关产品推荐

