搭建网站、调试服务器环境时,都会碰到 Service Unavailable 服务报错。页面直接打不开,反复刷新也没用,多数人排查半天也找不到问题在哪。其实这个报错根本不算疑难问题,大多是IIS程序池异常、服务器权限缺失、PHP组件加载失败造成的。结合长期网站搭建和服务器运维实操,我整理出三个最常见的故障场景和对应的解决办法,都是亲自测过的有效方案,帮大家快速修好网站访问故障。
平时在邯郸做网站、调试IIS环境的过程中,这类报错十分普遍。不同的日志提示,对应不一样的解决方式,大家不要盲目重启服务器、胡乱改配置,越折腾问题越严重。网站出现Service Unavailable报错,基本可以排除网站源码、程序程序本身的问题,绝大多数都是IIS权限不足、PHP组件加载异常、应用程序池权限缺失引发的。大家不用盲目重装运行环境、清空站点数据,对照上面三种故障场景逐一排查,基本都能快速解决问题,恢复网站正常访问。
一、应用程序池自动禁用、进程崩溃报错
故障现象:
1、浏览器访问网站,直接提示 Service Unavailable;
2、打开IIS管理器查看,网站对应的应用程序池被系统自动禁用,无法正常启动;
3、查看系统事件日志可发现核心报错:w3wp.exe进程报错、应用程序池因连续故障被自动关停。
故障根源:
服务器的NETWORK SERVICE系统账户,没有获取到IIS服务的启动和激活权限,导致IIS运行进程无法正常工作,程序池频繁出错,最后被系统自动禁用,网站也就无法访问了。
实操解决方法:
打开电脑控制面板,进入管理工具,找到组件服务。依次点开计算机、我的电脑、DCOM配置,在列表中找到 IIS ADMIN SERVICE 服务。右键点击属性,切换到安全栏目,找到启动和激活权限,点开自定义设置。
手动添加 NETWORK SERVICE 系统账户,给这个账户勾选本地启动、本地激活两项权限,确认保存所有设置。之后打开CMD命令窗口,输入 iisreset 指令重启IIS服务,等待服务重启完成,刷新网站就能正常打开了。
二、IIS+PHP环境报错、PHP组件加载失效
故障现象:
搭建好IIS+PHP环境后,网站全程无法访问,页面一直提示Service Unavailable,就连普通ASP静态页面也打不开。进入IIS后台查看ISAPI筛选器,能看到php5isapi.dll显示红色向下箭头,代表组件加载失败、已经失效,正常能用的状态是绿色向上箭头。
故障根源:
很多人配置环境只关注IIS参数,忽略了PHP文件夹的权限设置。PHP安装目录缺少EVERYONE读取权限,服务器无法正常调用PHP运行组件,直接导致整个网站服务瘫痪,出现访问报错。
实操解决方法:
先进入IIS配置,删掉失效的php5isapi.dll加载项并保存配置。找到电脑中的PHP安装根目录,右键文件夹选择属性,进入安全设置界面,添加 EVERYONE 全员权限,只开启只读权限就足够运行使用,不用开放多余权限,避免服务器出现安全漏洞。权限设置完毕后,重启IIS服务,PHP组件就能正常加载,网站访问恢复正常。
三、默认程序池反复崩溃、DCOM权限缺失
故障现象:
IIS默认的DefaultAppPool程序池突然崩溃宕机,手动重启之后,没过多久又会再次报错停用。就算新建程序池替换默认程序池,还是会出现进程意外终止、程序池被自动禁用的情况,问题反复出现,没法彻底解决。
查看系统事件日志能清晰看到DCOM权限报错,核心问题就是NETWORK SERVICE账户,没有COM服务器的本地激活权限,这也是程序池反复崩溃的根本原因。
实操解决方法:
对照日志中显示的CLSID编码,打开注册表编辑器,找到对应系统服务项,确认服务运行正常。随后进入组件服务界面,匹配对应的COM服务程序,手动为NETWORK SERVICE账户开启本地启动和本地激活权限,保存所有配置参数。
权限设置完成后,无需重复新建、替换应用程序池,直接执行IIS重启命令即可,能彻底解决程序池频繁崩溃、网站Service Unavailable报错的问题,站点可以稳定运行。