iis网站打开空白
打开IIS站点,站打浏览器一片白。开空F12看Network,站打请求返回200,开空Content-Length是站打0。这就是开空典型的“空白页”——服务器没报错,但什么都没吐出来。站打
我遇到过好几次这种情况,开空每次原因都不一样。站打有一次帮朋友看他的开空ASP.NET站点,本地跑得好好的站打,部署到IIS就白屏。开空查了半天,站打发现是开空web.config里的<compilation debug="true">没改,而服务器上没装对应的站打.NET SDK,编译直接静默失败。IIS不报错,因为错误被吞了。
这种“吞错误”的行为其实跟IIS的默认配置有关。打开IIS管理器,点进站点,双击“错误页”,你会看到默认是“详细错误”只在本地显示,远程访问一律给个空白或者通用错误页。所以你在服务器上访问正常,远程用户看到的就是白板。
改法很简单:在错误页功能里,右侧操作栏点“编辑功能设置”,选“自定义错误”,然后确保你的应用程序池身份能读web.config。或者更直接——在web.config的<system.webServer>节点下加<httpErrors errorMode="Detailed" existingResponse="PassThrough" />。这样至少能看到真实的错误信息,而不是猜谜。
另一个高频原因是应用程序池的“托管管道模式”。经典模式和集成模式对HTTP模块的处理完全不同。我见过一个老项目,用经典模式跑得好好的,运维手一抖改成集成模式,页面直接空白。原因是<system.webServer>里的模块配置没跟着改,请求被拦在半路。这种问题看日志最直接:%SystemDrive%\inetpub\logs\LogFiles,看sc-win32-status是不是0,sc-status是不是200。如果都是正常值但页面空白,基本就是管道或模块的问题。
还有一次更隐蔽。站点是PHP的,IIS里配了FastCGI。打开页面空白,PHP错误日志里一堆“Allowed memory size exhausted”。但IIS日志显示200。问题出在php.ini的display_errors被设成Off,而error_reporting又没写日志。改回On之后,页面立刻显示“内存不足”。这种就是典型的“错误被藏起来了”。
权限问题也会导致空白。IIS_IUSRS组对站点目录没有读权限时,静态文件都返回空白——不是403,是空白。因为IIS在尝试读取文件失败后,直接终止了响应,没写任何状态码。用Process Monitor抓一下,能看到大量ACCESS DENIED。给IIS_IUSRS加个“读取和执行”权限,问题消失。
说个我自己的排查顺序。先看IIS日志,确认sc-status和sc-substatus。200配0,基本是内容为空或模块拦截。500配0,是应用内部错误被吞。然后开详细错误,再看ASP.NET或PHP的错误日志。最后挂Process Monitor,看文件系统和注册表有没有被拒绝的访问。三步下来,90%的空白页都能定位。
有个坑要提醒:别在服务器上直接改web.config然后刷新页面。IIS会重启应用程序池,第一次请求可能因为编译超时而返回空白。等几秒再刷。我有次就是改完立刻刷,以为没生效,反复改了好几遍,最后发现是应用程序池还在启动中。
空白页比报错页更烦人。报错至少告诉你哪里错了,空白页让你连方向都没有。所以我的习惯是:任何新部署的站点,先把详细错误打开,日志级别调到Debug,跑通了再收紧。别一上来就追求“生产环境安全配置”,先让错误能说话。









