网页打不开IIS7,网页十有八九是打开端口被占、权限不足或者服务没起来。解决别急着重装系统,网页先按下面这几步排查,打开多半能救回来。解决
我遇到过最离谱的网页一次,客户说网站全挂了,打开远程过去一看,解决IIS管理器里站点明明在运行,网页可浏览器就是打开转圈。折腾半天,解决最后发现是网页80端口被一个流氓软件偷偷占了。你可以在命令行敲netstat -ano | findstr :80,打开看看最后那列PID对应的解决进程是谁。如果是陌生程序,直接任务管理器结束它,再重启IIS服务——iisreset这条命令比你在图形界面点一百次“停止”“启动”都管用。
要是端口没问题,那就看权限。默认安装的IIS7跑在Network Service账户下,你的网站目录要是放在C盘根目录或者系统盘深处,这个账户往往没权限读文件。右键站点文件夹,属性->安全,加上IIS_IUSRS组的读取权限,注意别手滑把“完全控制”勾上,安全第一。之前有个做外贸的朋友,把网站传到D盘一个新建的文件夹里,怎么配都报403,我让他检查权限,他一脸懵——原来他压根没给过任何账户权限,默认只有Administrator能进。
服务没起来的情况更隐蔽。打开“服务”管理器,找World Wide Web Publishing Service,看它是不是停止状态。有时候Windows更新或者安全软件会把这个服务禁用,你启动它还会报依赖服务错误。这时候得连坐检查Windows Process Activation Service和IIS Admin Service,三个要一起启动。我见过一台服务器,前两个服务都正常,唯独W3SVC卡在“正在启动”,最后发现是.NET Framework 4.0的注册表项损坏,用aspnet_regiis -i重新注册才解决。
还有个坑容易忽略——防火墙。IIS7默认只放行80和443端口,你要是改了绑定端口,比如用8080测试,防火墙没开这个端口,外部照样打不开。本地浏览器访问localhost:8080能通,换成服务器IP就超时,基本就是这个原因。去防火墙高级设置里添加入站规则,别只开TCP端口,程序路径直接指向C:\Windows\System32\inetsrv\w3wp.exe更稳妥。
最后说个偏门的。如果你用的是Windows Server 2008或更早版本,装了IIS7之后没装“IIS 6元数据库兼容性”组件,某些老程序调用接口会直接报500错误。在“服务器管理器”->“功能”里勾上这个组件,重启IIS,问题往往瞬间消失。这玩意儿不常用,但真碰上能省你一下午。
排查顺序别乱:先看端口,再看权限,然后查服务,最后动防火墙。按这个路子走,八成问题十分钟内能定位。要是都试过了还不行,打开事件查看器——应用程序日志里会记着具体错误代码,复制那段信息去搜,比盲猜靠谱得多。