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

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

**测试环境**

- 版本号: 26100.33650
- 版本: Standard / Datacenter
- 架构: x64
- 证据: E1
- 核验日期: 2026-10-29

## 一句话结论

IIS 故障要收三层：

1. **IIS 访问日志** — 哪个请求、什么状态、耗时多少。
2. **失败请求跟踪** — 哪个模块/处理器失败。
3. **Windows 事件 / HTTP.sys** — 应用池崩溃、端口冲突、TLS。

先看状态码；读日志之前不要重启 IIS。

## 访问日志

默认路径：

```text
C:\inetpub\logs\LogFiles\W3SVC<site-id>\
```

值得保留的 W3C 字段：

```text
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
```

常用查询：

```powershell
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”有用得多。

## 和 Windows 对上

```powershell
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 | 上游超时 |

> **警告: 日志可能含敏感数据**
>
> 查询串、认证 token、POST body 可能进日志/跟踪。限制 ACL、避免记录敏感查询串、设保留期。不要把原始生产日志不脱敏贴到公开 issue。

## 保留与轮转

- 日志放独立卷，不放系统盘。
- 设大小/时间上限；压缩归档可以。
- 多台服务器就集中收集；本机日志随主机消失。
- 配置单独备份；日志是证据，不是备份。

## 实验室说明

E1。实验室有真实 IIS 站点（`Lab`，W3SVC id 2）和默认日志，但本页没有启用失败请求跟踪。路径/命令是验证步骤，不声称每个状态都复现过。

## 来源

- [Microsoft Learn — IIS 日志](https://learn.microsoft.com/zh-cn/iis/manage/provisioning-and-managing-iis/configure-logging-in-iis)
- [Microsoft Learn — 失败请求跟踪](https://learn.microsoft.com/zh-cn/iis/troubleshoot/using-failed-request-tracing/troubleshooting-failed-requests-using-tracing-in-iis)

---

来源页面: https://winbook.fyi/zh/server/web/iis-logs/
