跳转到内容

IIS 日志与失败请求跟踪:先找 500 的原因,再谈重装

核验于 2 分钟阅读

读 W3C IIS 日志、开启失败请求跟踪、把 500/503 与应用池和 HTTP.sys 事件对上,并让日志有用又不泄露数据。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
页面类型
排障

IIS 故障要收三层:

  1. IIS 访问日志 — 哪个请求、什么状态、耗时多少。
  2. 失败请求跟踪 — 哪个模块/处理器失败。
  3. 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-ip
cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken

常用查询:

终端窗口
Get-Content 'C:\inetpub\logs\LogFiles\W3SVC2\*.log' -Tail 50
Select-String -Path 'C:\inetpub\logs\LogFiles\W3SVC2\*.log' -Pattern ' 500 | 503 '

sc-substatus 和 sc-win32-status 常能指出真实原因(如 500.19 配置错误、500.30 ANCM 启动失败、503 应用池停止)。

IIS 管理器 → 站点 → 失败请求跟踪:

  • 为站点启用;
  • 路径设在 Web 根之外;
  • 加一条 500-599 的规则(需要时加慢请求);
  • 复现一次,读 XML 跟踪。

跟踪会显示模块/处理器和确切失败点,比“500 Internal Server Error”有用得多。

终端窗口
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)和默认日志,但本页没有启用失败请求跟踪。路径/命令是验证步骤,不声称每个状态都复现过。

来源