别慌!iis 网站正在建设中 页面满天飞?老运维教你3招彻底根治,亲测有效
昨天半夜收到报警,说客户那边访问全是 503 或者那个经典的“iis 网站正在建设中”。
我去查了下,好家伙,服务器 CPU 占用率才 5%,内存也闲得很。
这根本不是性能问题,是配置没搞对。
很多刚入行的兄弟,遇到这种情况第一反应就是重启 IIS 服务。
重启确实能临时解决,但过两天又犯病,烦不烦?
今天就把我压箱底的排查思路掏出来,全是干货,不整虚的。
第一步,先确认是不是真的“建设中”。
打开浏览器,F12 看网络请求。
如果返回的是 HTTP 200,但内容里写着“iis 网站正在建设中”,那说明站点本身是活的。
这时候别急着动服务器,先看默认文档设置。
很多新手把 default.aspx 或者 index.html 删了,或者改错了名字。
IIS 找不到默认文档,就会抛出那个让人头疼的提示。
去 IIS 管理器里,点开站点,找到“默认文档”。
看看列表里有没有你实际用的文件。
如果没有,赶紧加上去,顺序排好。
这一步能解决 60% 的“假死”问题。
第二步,检查应用程序池的状态。
有时候站点看着好好的,其实底层的应用程序池已经挂了。
在 IIS 管理器左侧连接面板,找到“应用程序池”。
看看对应的那个池,状态是不是“已停止”。
如果是,右键启动它。
如果启动不了,或者启动后秒停,那就要看事件查看器了。
Win+R 输入 eventvwr.msc,打开 Windows 日志。
找应用程序日志,筛选来源为 W3SVC 或者 WAS 的错误。
通常这里会有具体的报错信息,比如“找不到程序集”或者“权限不足”。
我上次遇到一个坑,是因为站点目录权限没给 IIS_IUSRS 组。
虽然能访问静态文件,但动态内容直接报错。
给文件夹加上读写权限,问题解决。
这一步很关键,别嫌麻烦,日志不会骗人。
第三步,也是最容易被忽视的,检查绑定和防火墙。
有时候你以为网站通了,其实只是本地通了。
去服务器防火墙里看看,80 端口和 443 端口是不是真的放行了。
特别是有些云服务商,默认安全组是封闭的。
你得去控制台里手动加规则。
还有,检查下 hosts 文件。
有时候本地测试环境改了 hosts,导致解析错误,看着像“建设中”,其实是 DNS 解析到了错误的 IP。
这一步虽然简单,但经常有人栽跟头。
除了上面这三步,还有一个高级技巧。
如果你用的是自定义错误页面,检查一下 customErrors 的配置。
在 web.config 里,看看 mode 是不是设成了 RemoteOnly 或者 On。
如果设成了 Off,可能会暴露一些敏感信息,或者显示默认的错误页。
把 mode 改成 On,并指定一个友好的错误页面。
这样用户看到的不再是冷冰冰的代码,而是“网站维护中”的温馨提示。
当然,如果你是想彻底去掉那个“iis 网站正在建设中”的提示。
那就得改默认的错误处理模块。
在 IIS 管理器里,找到“错误页”。
双击进去,把 404 和 500 的错误状态码对应的响应状态改成“执行指定文件”。
然后指向你准备好的 404.html 或 500.html。
这样不管发生什么错误,用户看到的都是你设计的页面。
这点很重要,用户体验不能丢。
最后说个避坑指南。
千万别为了省事,直接把整个站点目录权限设为 Everyone 完全控制。
这简直是给黑客留后门。
权限最小化原则,必须记住。
给 IIS_IUSRS 读取和执行权限,给管理员完全控制。
这就够了。
还有,定期备份 web.config 文件。
很多时候配置改乱了,回滚一下就好。
别每次都从头开始配,浪费时间。
总结一下,遇到“iis 网站正在建设中”别慌。
先查默认文档,再查应用池日志,最后查防火墙和权限。
按顺序排查,基本都能搞定。
如果你试了这些方法还是不行,那可能是代码层面的问题。
这时候就得看代码逻辑,是不是有未处理的异常。
总之,多查日志,少猜谜。
日志是你的好朋友,它能告诉你真相。
希望这篇能帮到你,别再半夜被报警电话吵醒了。
加油,打工人。