IIS作为Windows系统自带的Web服务器,部署起来看似简单,但真正把网站跑起来的时候,往往会遇到各种打不开的情况。有人在本机访问正常,换台电脑就404;有人配置完之后浏览器一直转圈,最后提示无法访问此页面。这些问题看起来五花八门,实际上排查思路是有章法可循的。本文把常见的故障点按层次拆解,配合具体的操作步骤,帮你把问题一个个排除掉。

第一步:先确认IIS服务本身是否正常
排查任何问题都要先看服务状态。打开命令提示符,执行以下命令查看IIS相关的服务是否在运行:
net start | findstr /i "W3SVC WAS" sc query W3SVC
如果W3SVC(万维网发布服务)没有启动,站点自然无法访问。可以手动启动它,并把启动类型设为自动:
net start w3svc sc config W3SVC start= auto
另外一个容易被忽略的点是应用程序池。如果应用程序池被停止,访问网站时会直接返回503错误。在IIS管理器左侧点击“应用程序池”,检查你的站点对应的应用程序池是否为“已启动”状态。有些程序池启动后几秒钟就自动停掉,多半是启动失败次数达到上限被禁用了,可以右键高级设置,把“启动故障次数上限”临时调大,或者查看系统事件日志找到真正的崩溃原因。
还要检查IIS安装是否完整。如果是精简版的系统,可能缺少一些组件。可以通过控制面板的程序和功能,进入“启用或关闭Windows功能”,确认Internet Information Services下的Web核心功能、常见HTTP功能、ASP.NET等必要选项都已勾选。
第二步:检查网站绑定、默认文档与目录权限
这三项是配置层面最常见的故障来源,很多“本机能打开、外面打不开”或者一直404的问题都出在这里。
1. IP地址和端口绑定
在IIS管理器中选中网站,点击右侧“绑定”,查看当前绑定的IP和端口。如果绑定的是某个内网IP,而访问者用的是别的地址,就会出现无法连接的情况。建议未绑定IP时留空,表示绑定所有网卡。端口冲突也很常见,可以执行下面的命令看看80端口被谁占了:
netstat -ano | findstr :80 tasklist /fi "PID eq 查到的进程ID"
如果发现是其他程序(比如SQL Server的Reporting服务、迅雷等)占用了80端口,要么改IIS端口,要么停掉占用程序。
2. 默认文档设置
访问根路径时IIS靠默认文档定位首页,如果站点目录里的首页文件叫index.html,而默认文档列表里只有Default.htm和iisstart.htm,就会出现403禁止访问的提示。进入站点功能视图,打开“默认文档”,把你站点的首页文件名添加进去即可,比如index.html、index.asp、index.aspx等。
3. 目录访问权限
应用程序池默认使用虚拟账号运行(IIS ApplicationPool\Identities),如果网站目录没有赋予足够的读取权限,访问时会报401或者配置文件无法读取的错误。可以用icacls命令快速授权:
icacls "C:\inetpub\wwwroot\mysite" /grant "IIS_IUSRS:(OI)(CI)RX" /T icacls "C:\inetpub\wwwroot\mysite" /grant "IUSR:(OI)(CI)RX" /T
如果站点涉及写入操作(比如上传文件、写日志),对应子目录还需要单独授予修改权限。注意权限不要一次性给Everyone完全控制,虽然能解决报错,但会留下安全隐患。
第三步:排查防火墙与网络层问题
配置好一切却发现外网访问不了,十有八九是防火墙在拦截。Windows防火墙默认只放行了一些常见端口,如果站点用了非标准端口,必须手动添加入站规则:
netsh advfirewall firewall add rule name="IIS-Web" dir=in action=allow protocol=TCP localport=80
如果在云服务器上部署,除了系统防火墙,还要检查云平台的安全组规则,确认80或443端口的入方向已经放行。这一点经常被忽略,很多人在系统里折腾半天,最后发现是安全组没开。
测试端口是否通,可以在远程机器上执行:
telnet 服务器IP 80
如果telnet连不上,说明请求根本没到达IIS,问题在网络层或防火墙;如果telnet能连上但浏览器打不开,问题才在IIS配置层面。这个判断能帮你节省大量排查时间。
另外,如果绑定了域名,还要检查DNS解析是否生效,可以在本机用ping确认域名指向的IP是否正确。
第四步:处理动态页面的运行时错误
静态HTML能访问,ASP或ASPX页面报错,这类问题集中在运行时环境上。典型情况是安装IIS和.NET Framework的顺序颠倒,导致ASP.NET没有正确注册。解决方法是重新注册:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
注册完成后重启IIS生效:
iisreset
对于ASP.NET站点,还要确认应用程序池的.NET CLR版本选择正确(v4.0或无托管代码),托管管道模式(集成或经典)与程序兼容性匹配。老程序迁移到集成模式下经常报验证错误,可以先把程序池改成经典模式测试。
遇到500内部错误时,页面默认不显示详细原因,可以在浏览器端访问提示的指引,去服务器上查看C:\Windows\System32\LogFiles目录以及IIS的失败请求跟踪。也可以临时在web.config中开启详细错误输出定位问题,排查完记得关闭,避免暴露服务器信息。
热门问题速查汇总
问:本机localhost能访问,局域网其他电脑打不开?
依次检查三点:绑定是否限制了IP、Windows防火墙是否放行端口、局域网电脑和服务器是否在同一网段且能ping通。多数情况是防火墙没放行。
问:访问报403.14错误?
这是目录浏览被禁止且默认文档没匹配到。要么在默认文档里添加正确的首页文件,要么临时启用目录浏览功能(仅限测试环境)。
问:应用程序池总是自动停止?
查看系统事件日志中的应用程序错误,常见原因是站点代码抛出未处理异常导致进程崩溃,或者应用程序池标识没有访问站点目录的权限。修复根因后再启动,不要只调大启动次数上限来掩盖问题。
问:报“HTTP 错误 500.19”,无法读取配置文件?
一般是web.config格式错误,或者应用程序池账号没有读取web.config的权限,按上文icacls的方式授权即可。
问:改了配置不生效?
执行iisreset重启服务,或者检查是否有多层web.config继承覆盖了你的设置。
总体来说,IIS网站打不开的排查遵循由外到内的思路:先确认网络通不通,再确认服务在不在,最后深入到配置和代码层面。把telnet测试、服务状态检查、绑定与权限确认这三板斧练熟,绝大多数问题都能在十分钟内定位到原因。