在 Windows 2000 Server 環境下運行 IIS 5.0 時,HTTP 500 內部伺服器錯誤是系統管理員最常遇到的棘手問題之一。這類錯誤的典型特徵是:ASP 動態網頁無法瀏覽,但靜態 HTM/HTML 頁面卻能正常訪問;同時系統事件日誌與安全性日誌中會記錄大量相關錯誤資訊。本文將從錯誤表現、根本原因分析到分步驟解決方案,為您提供一份完整的排錯指南。
當嘗試訪問原本正常運行的 ASP 頁面時,Internet Explorer 會顯示以下兩種典型錯誤畫面:
事件 ID 529 - 登錄失敗
事件類型:失敗審核 | 事件來源:Security | 事件種類:登錄/登出
描述:登錄失敗,原因:使用者名稱未知或密碼錯誤
使用者名稱:IWAM_MYSERVER | 域:MYDOM | 登錄類型:4
事件 ID 681 - 帳戶登錄失敗
事件類型:失敗審核 | 事件來源:Security | 事件種類:帳戶登錄
描述:登錄到帳戶 IWAM_MYSERVER 失敗,錯誤代碼:3221225578 (0xC000006A - 使用者名稱或密碼錯誤)
事件 ID 10004 - DCOM 錯誤
事件類型:錯誤 | 事件來源:DCOM
描述:DCOM 遇到錯誤「無法更新密碼。提供給新密碼的值包含密碼中不允許的值。」並且無法登錄到 .\IWAM_MYSERVER 上以運行伺服器:{3D14228D-FBE1-11D0-995D-00C04FD919C1}
事件 ID 36 - W3SVC 警告
事件類型:警告 | 事件來源:W3SVC
描述:伺服器未能載入應用程式 '/LM/W3SVC/4/Root'。錯誤是 'RunAs 的格式必須是<域名>\<使用者名稱>或只是<使用者名稱>'。
IWAM (Internet Web Application Manager) 帳戶是 IIS 5.0 安裝時系統自動建立的內建帳戶,命名格式為 IWAM_<電腦 NetBIOS 名稱>(如 IWAM_MYSERVER)。其核心職責是啟動 IIS Out-of-Process Pooled Applications(進程外集區應用程式),即以獨立進程運行的 ASP 應用程式。
IWAM 帳戶密碼由三方共同持有並使用:
理論上,作業系統負責同步這三方的密碼。但由於未知原因(可能是 Bug 或特定操作導致),同步機制偶爾會失效,造成三方密碼不一致。當 IIS 或 COM+ 嘗試使用錯誤密碼登入系統啟動應用程式池時,系統拒絕登入請求,導致應用程式池啟動失敗,最終引發 HTTP 500 錯誤。
核心思路:將 IWAM 帳戶在 Active Directory、IIS Metabase、COM+ 三處的密碼手動統一為一個已知值。所有操作需以 Administrator 身份執行。
dsa.msc)IWAM_MYSERVER 選擇「重設密碼」Aboutnt2001),取消勾選「使用者下次登入時必須變更密碼」,確定完成IIS 5.0 提供管理腳本 adsutil.vbs(預設位於 C:\Inetpub\AdminScripts\)來修改 Metabase 設定:
cd C:\Inetpub\AdminScripts
cscript adsutil.vbs SET w3svc/WAMUserPass "Aboutnt2001"
成功時顯示:WAMUserPass : (STRING) "Aboutnt2001"
方法 A:使用元件服務 MMC (手動逐個同步)
mmc,新增「元件服務」嵌入式管理單元Aboutnt2001 並確認方法 B:使用 synciwam.vbs 腳本 (自動批量同步,推薦)
腳本位於 C:\Inetpub\AdminScripts\synciwam.vbs,用法簡單:
cscript synciwam.vbs -v
關鍵優勢:腳本會自動從 IIS Metabase 讀取 IWAM 密碼,掃描所有 Out-of-Process Applications 並逐一同步,比手動方式更全面、快捷。
⚠ 關鍵前提:執行 synciwam.vbs 前,必須確保 IIS Metabase 與 Active Directory 的 IWAM 密碼已一致。因為腳本從 Metabase 讀取密碼,若 Metabase 密碼錯誤,同步會失敗並報錯 80110414(找不到應用程式)。
完成上述三步驟後,重新啟動 IIS (iisreset) 或重新啟動伺服器。此時 ASP 頁面應恢復正常訪問。建議定期檢查事件日誌,確保無新的 ID 10004、ID 36 錯誤產生。若環境允許,升級至 IIS 6.0+ (Windows Server 2003+) 可從根本上避免此類問題,因為新版本採用了應用程式池身份機制,不再依賴單一 IWAM 帳戶。