Exchange 节点 IIS 模块异常导致 OWA 500 错误 | 故障排查实录

Exchange 2016 双节点 DAG 环境 IIS 模块 HttpSessionModule 加载异常导致 OWA/ECP 500 错误,附完整排查思路、故障隔离步骤和数据库副本/索引重建修复过程。

...

背景

公司 Exchange 2016 双节点 DAG 环境,MAIL01 节点因 IIS 模块加载异常导致 OWA/ECP 500 错误。虽然 IIS 问题修复后服务恢复,但数据库副本和内容索引状态异常,需要进一步处理。

故障基本信息

  • 节点名称: HQ-EX16MAIL01
  • 故障时间: 2026-04-23
  • 受影响范围:
    • 客户端收发: 邮箱客户端无法连接服务器,无法收发邮件。
    • Web端访问: 访问 OWA/ECP 登录页面时报 500 错误
    • 管理端连接: Exchange Management Shell (EMS) 无法连接本地节点。

故障现象描述

应用程序日志 (Event Log)

  • 事件 ID: 1310 (ASP.NET 4.0)
  • 异常类型: ConfigurationErrorsException
  • 错误信息: 未能加载文件或程序集"HttpSessionModule, Version=5.2.0.0…“或它的某一个依赖项。系统找不到指定的文件。

命令行报错

  • 现象: EMS 启动时无法连接至本地 MAIL01,自动切换至 MAIL02 节点。
  • 报错: WinRM 客户端无法处理该请求,无法确定从目标计算机得到的 HTTP 响应的内容类型。

用户端表现

  • 用户登录 mail.crashmemo.cn 跳转页面显示 500
  • 邮件客户端无法连接服务器,无法收发邮件

outlook客户端连接失败

邮箱客户端连接服务器失败

foxmail无法送邮件

排查逻辑与步骤

隔离故障

Exchange 双节点 DAG 环境,内网 DNS 服务器 mail.crashmemo.cn 解析到两个 Exchange 节点的 IP 地址,客户端默认使用 DNS 轮询(Round Robin)轮流访问 MAIL01 和 MAIL02。

  • 操作: 断开 MAIL01 虚拟机的网卡,DNS 轮询会让所有客户端自动切换到 MAIL02 的服务。
  • 目的: 防止故障节点在修复期间因服务频繁重启,影响正在使用的用户。

定位源头

  1. 全局扫描: 使用 PowerShell 脚本对 IIS 全局配置文件进行关键字扫描:
    • applicationHost.config
    • machine.config
  2. 结果: 在 C:\Windows\System32\inetsrv\config\applicationHost.config 中发现全局引用。

修复

  1. 备份: 备份 applicationHost.config 为 .bak 文件。
  2. 清理: 以管理员权限编辑该文件,定位并删除 节和 节中关于 HttpSessionModule 的所有 add 标签。
  3. 清除缓存: 彻底删除 ASP.NET 临时编译目录: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\
  4. 服务重置: 执行 iisreset 重新加载配置。

验证

  1. 打开 IIS 管理器,点击"Exchange Back End"站点下的"模块”,不再弹出报错窗口。
  2. 虚拟机网卡连接上去。
  3. 打开 Exchange Management Shell 正常连接。

IIS 管理器模块列表正常显示

  1. 终端访问 mail.crashmemo.cn/owa 和 https://mail.crashmemo.cn/ecp 均可以正常登录。
  2. 通过故障转移群集管理器或命令 Get-ClusterNode 查看 mail1 是否已经正常加入集群。

EMS 正常连接 MAIL01

DAG 群集节点状态正常

到这里问题基本上就修复完成了,但是看了下 mail1 服务器的数据库和索引还是挂起暂停的状态,还是要处理下,下面处理数据库和索引问题。

修复数据库同步

查询 Exchange 数据库同步状态

1
Get-MailboxDatabaseCopyStatus -Server HQ-EX16MAIL01

Status 显示 FailedAndSuspended(失败暂停)

数据库副本状态 FailedAndSuspended

Exchange 复制状态检测

1
Test-ReplicationHealth -Server HQ-EX16MAIL01

可以看到 DatabaseRedundancy(数据库冗余)的结果是失败

从报错信息可以看到关键信息: 由于 ‘TCP:HQ-EX16MAIL02.crashmemo.LOCAL/STAFF-DB03\E020010DD71.log’ 丢失,增量种子重新设定检查失败。

复制状态检测 DatabaseRedundancy 失败

日志丢失错误信息

更新数据库副本

有两种方式:WEB 界面和命令行,二选一。

ECP 更新数据库副本

  1. 登录 ECP -> 服务器 -> 数据库
  2. 选中状态为 FailedAndSuspended 的数据库。
  3. 在右侧窗格中找到 HQ-EX16MAIL01 副本,点击"更新"。
  4. 通常选择默认选项(从 MAIL02 复制)即可。

ECP 数据库副本更新界面

数据库副本更新成功

命令行更新数据库副本

1
2
获取该服务器上所有挂起的副本并重新同步
Get-MailboxDatabaseCopyStatus -Server HQ-EX16MAIL01 | Where-Object { $_.Status -eq "FailedAndSuspended" } | Update-MailboxDatabaseCopy -DeleteExistingFiles

注意: -DeleteExistingFiles 参数:因为报错提示需要 Reseed,系统通常需要删除 MAIL01 上旧的、损坏的数据库文件,然后重新从 MAIL02 下载。

数据库副本恢复正常

现在 STAFF-DB01 数据库副本状态已经正常,但是内容索引状态:FailedAndSuspended

数据库副本状态恢复正常

Web界面显示

Web 界面显示数据库副本正常

修复内容索引

内容索引(Content Index)负责 Outlook 和 OWA 的搜索功能。如果索引不正常,员工在搜索历史邮件时会搜不到结果。

索引修复

1
2
# 加 -CatalogOnly 参数,只处理邮箱数据库的“内容索引(Catalog)”,不涉及数据库本身的数据复制
Update-MailboxDatabaseCopy -Identity "STAFF-DB01\HQ-EX16MAIL01" -CatalogOnly

出现提示:因为刚刚完成了数据库文件(.edb)的全量同步(Reseed),Exchange 系统在内部记录了"正在进行同步任务"。需要等待一会儿再来执行。

内容索引修复提示

再次执行同步命令:

索引同步执行中

同步结束后查看索引状态还是 FailedAndSuspended:

1
Get-MailboxDatabaseCopyStatus -Identity "STAFF-DB01\HQ-EX16MAIL01" | Select-Object Name, ContentIndexState, ContentIndexErrorMessage

报错:The content index is corrupted(内容索引已损坏)

内容索引损坏报错

索引重建

1
2
# 加一个 -DeleteExistingFiles 参数,它会强制删掉 MAIL01 上那个报错“Corrupted”的旧索引文件夹,然后从 MAIL02 重新拉一份干净的索引过来。
Update-MailboxDatabaseCopy -Identity "STAFF-DB01\HQ-EX16MAIL01" -CatalogOnly -DeleteExistingFiles

索引重建执行中

还是有问题。

索引重建后仍然报错

重启服务

重启 MSExchangeFastSearch 和 HostControllerService 这两个服务:

  • MSExchangeFastSearch: 充当"逻辑大脑",负责监控数据库变动并提取邮件关键词。
  • HostControllerService: 充当"执行四肢",负责索引文件的物理读写、跨服务器同步及存储。
1
2
Stop-Service MSExchangeFastSearch
Stop-Service HostControllerService

服务停止成功

1
2
Start-Service HostControllerService
Start-Service MSExchangeFastSearch

服务启动成功

查看下索引状态,发现已经恢复正常了!

内容索引状态恢复正常

PowerShell 查询索引状态正常

总结

本次故障分为两个阶段处理:

  1. IIS 模块异常修复:通过扫描 applicationHost.config 定位到损坏的 HttpSessionModule 引用,清理后恢复服务
  2. 数据库副本与索引修复:重启相关服务完成内容索引重建

关键经验:

  • IIS 模块加载异常时,优先检查 C:\Windows\System32\inetsrv\config\applicationHost.config 中的模块配置
  • 数据库副本状态异常时,先用 -DeleteExistingFiles 参数强制重建
  • 内容索引问题可通过重启 MSExchangeFastSearch 和 HostControllerService 服务解决
Created by aka.g