IIS 日志与失败请求跟踪:先找 500 的原因,再谈重装
读 W3C IIS 日志、开启失败请求跟踪、把 500/503 与应用池和 HTTP.sys 事件对上,并让日志有用又不泄露数据。
测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 排障
IIS 故障要收三层:
- IIS 访问日志 — 哪个请求、什么状态、耗时多少。
- 失败请求跟踪 — 哪个模块/处理器失败。
- Windows 事件 / HTTP.sys — 应用池崩溃、端口冲突、TLS。
先看状态码;读日志之前不要重启 IIS。
默认路径:
C:\inetpub\logs\LogFiles\W3SVC<site-id>\值得保留的 W3C 字段:
date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ipcs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken常用查询:
Get-Content 'C:\inetpub\logs\LogFiles\W3SVC2\*.log' -Tail 50Select-String -Path 'C:\inetpub\logs\LogFiles\W3SVC2\*.log' -Pattern ' 500 | 503 'sc-substatus 和 sc-win32-status 常能指出真实原因(如 500.19 配置错误、500.30 ANCM 启动失败、503 应用池停止)。
开启失败请求跟踪
Section titled “开启失败请求跟踪”IIS 管理器 → 站点 → 失败请求跟踪:
- 为站点启用;
- 路径设在 Web 根之外;
- 加一条
500-599的规则(需要时加慢请求); - 复现一次,读 XML 跟踪。
跟踪会显示模块/处理器和确切失败点,比“500 Internal Server Error”有用得多。
和 Windows 对上
Section titled “和 Windows 对上”Get-WinEvent -LogName System -MaxEvents 200 | Where-Object ProviderName -match 'HTTP|W3SVC|Application'Get-WinEvent -LogName Application -MaxEvents 200 | Where-Object ProviderName -match 'Application Error|.NET Runtime'Get-Service W3SVC,WAS还要查:
- 应用池状态(
Get-IISAppPool); - 端口冲突(
netsh http show servicestate); - 磁盘满(日志停止、应用失败);
- 证书绑定(TLS 握手失败发生在 IIS 记日志之前)。
| 状态 | 先查 |
|---|---|
| 400 | Host 头/绑定格式错误 |
| 401.3 | 应用池身份的 NTFS 权限 |
| 403.14 | 目录浏览关闭 / 无默认文档 |
| 404 | 绑定/处理器/路由,不一定是文件不存在 |
| 500.19 | web.config 无效或模块缺失 |
| 500.30 | ANCM/应用启动失败 |
| 502/503 | 上游/HPH/应用池没跑 |
| 504 | 上游超时 |
- 日志放独立卷,不放系统盘。
- 设大小/时间上限;压缩归档可以。
- 多台服务器就集中收集;本机日志随主机消失。
- 配置单独备份;日志是证据,不是备份。
E1。实验室有真实 IIS 站点(Lab,W3SVC id 2)和默认日志,但本页没有启用失败请求跟踪。路径/命令是验证步骤,不声称每个状态都复现过。