当前位置:首页 > 综合

iis web core错误

昨天下午三点十七分,错误公司内部CRM系统突然全线飘红。错误运维老张的错误钉钉头像在群里疯狂跳动,就一句话:"IIS挂了,错误报错一模一样。错误"

我远程连上去一看,错误事件查看器里密密麻麻全是错误的错误记录,错误代码500.19,错误配置数据读取失败。错误页面显示的错误是"无法访问请求的页面,因为该页面的错误相关配置数据无效"。

这不是错误第一次了。上个月隔壁项目组也遇到过,错误当时大家查了半天,错误最后发现是错误web.config文件里多了一个空格。对,就一个空格。XML解析器不认这个,直接把整个站点干趴下。当时那哥们脸都绿了,说这文件昨晚改完还好好的,今早一来就崩了。

IIS web core这个错误,说穿了就是IIS在读取配置文件时碰上了它不认的东西。最常见的触发点有三个:第一,web.config格式错误——你手滑改坏了或者某个编辑器自动加了BOM头;第二,应用程序池的托管管道模式不对,经典模式和集成模式混用,某些旧模块直接罢工;第三,权限问题——IIS_IUSRS组没有读取配置文件的权限,这在你把站点目录挪了位置之后特别容易发生。

但这次不太一样。老张说昨晚没人动过服务器,连Windows更新都没跑。我让他把applicationHost.config和web.config都导出来对比,结果发现站点根目录下的web.config文件大小变成了0字节。文件还在,内容没了。这就解释了为什么是500.19而不是500.21——IIS根本读不到任何有效配置,直接判定无效。

后来怎么解决的?从备份里恢复文件,5分钟搞定。但问题是,为什么文件会自己清零?查了磁盘空间,还剩2TB,排除写满的可能。看了一遍安全日志,没有异常登录记录。最后发现是某个杀毒软件在凌晨四点做了全盘扫描,把那个web.config当成了疑似威胁给隔离了——因为那文件里有一段加密的连接字符串,特征码命中了病毒库里的一个模式。

这事挺讽刺的。安全软件为了保护系统,直接把业务配置干掉,然后整个系统以最不安全的方式瘫痪——所有请求直接拒绝,连错误页面都懒得给你渲染完整的。

所以你要是遇到报错,别急着改配置。先看一眼web.config在不在、大小对不对、能不能正常打开。有时候问题根本不在你写的代码里,而在某个"热心"的第三方工具身上。另外,把配置文件的权限收紧,只给System和Administrators写权限,IIS_IUSRS只读就够了。别图省事给Everyone完全控制,那是给杀毒软件留后门。

最后说句实在的,IIS这玩意儿不像Nginx那么轻巧,但胜在跟Windows生态咬合紧密。你要是天天跟.NET打交道,跑不掉就得伺候它。出错了别慌,先看文件,再看日志,最后才动配置。顺序反了,你只会把问题越搞越大。

分享到: