IIS5 HTTP500內部錯誤解決辦法
一.錯誤表現
IIS5的HTTP 500內部服務器錯誤是我們經常碰到的錯誤之一,它的主要錯誤表現
就是ASP程序不能浏覽但HTM靜態網頁不受影響。另外當錯誤發生時,系統事件日
志和安全事件日志都會有相應的記錄。
具體如下:
(一)IE中的表現
當浏覽以前能夠正常運行的asp頁面時會出現如下的錯誤:
網頁無法顯示
您要訪問的網頁存在問題,因此無法顯示。
請嘗試下列操作:
打開 http://127.0.0.1 主頁,尋找指向所需信息的鏈接。
單擊刷新按鈕,或者以後重試。
HTTP 500 - 內部服務器錯誤
Internet 信息服務
技術信息(支持個人)
詳細信息:
Microsoft 支持
或者是:
Server Application Error
The server has encountered an error while loading an application durin
g the processing of your request. Please refer to the event log for mo
re detail information. Please contact the server administrator for ass
istance.
(二)安全日志記錄(2條)
事件類型: 失敗審核
事件來源: Security
事件種類: 登錄/注銷
事件 ID: 529
日期: 2001-9-9
事件: 11:17:07
用戶: NT AUTHORITY\SYSTEM
計算機: MYSERVER
描述:
登錄失敗:
原因: 用戶名未知或密碼錯誤
用戶名: IWAM_MYSERVER
域: MYDOM
登錄類型: 4
登錄過程: Advapi
身份驗證程序包: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
工作站名: MYSERVER
事件類型: 失敗審核
事件來源: Security
事件種類: 帳戶登錄
事件 ID: 681
日期: 2001-9-9
事件: 11:17:07
用戶: NT AUTHORITY\SYSTEM
計算機: MYSERVER
描述:
登錄到帳戶: IWAM_MYSERVER
登錄的用戶: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
從工作站: MYSERVER
未成功。錯誤代碼是: 3221225578
(三)系統日志中的記錄(2條)
事件類型: 錯誤
事件來源: DCOM
事件種類: 無
事件 ID: 10004
日期: 2001-9-9
事件: 11:20:26
用戶: N/A
計算機: MYSERVER
描述:
DCOM 遇到錯誤“無法更新密碼。提供給新密碼的值包含密碼中不允許的值。 ”
並且無法登錄到 .\IWAM_MYSERVER 上以運行服務器:
{3D14228D-FBE1-11D0-995D-00C04FD919C1}
事件類型: 警告
事件來源: W3SVC
事件種類: 無
事件 ID: 36
日期: 2001-9-9
事件: 11:20:26
用戶: N/A
計算機: MYSERVER
描述:
服務器未能轉入應用程序 '/LM/W3SVC/4/Root'。錯誤是 'RunAs 的格式必須是<
域名>\<用戶名>或只是<用戶名>'。
若要獲取關於此消息的更多的信息,請訪問 Microsoft 聯機支持站點:
http://www.microsoft.com/contentredirect.asp 。
二.原因分析
綜合分析上面的錯誤表現我們可以看出,主要是由於IWAM賬號(在我的計算機即
是IWAM_MYSERVER賬號)的密碼錯誤造成了HTTP 500內部錯誤。
在詳細分析HTTP500內部錯誤產生的原因之前,先對IWAM賬號進行一下簡要的
介紹:
IWAM賬號是安裝IIS5時系統自動建立的一個內置賬號,主要用於啟動進程之外
的應用程序的Internet信息服務。IWAM賬號的名字會根據每台計算機NETBIOS名字
的不同而有所不同,通用的格式是IWAM_MACHINE,即由“IWAM”前綴、連接線
“_”加上計算機的NETBIOS名字組成。我的計算機的NETBIOS名字是MYSERVER,
因此我的計算機上IWAM賬號的名字就是IWAM_MYSERVER,這一點與IIS匿名賬號
ISUR_MACHINE的命名方式非常相似。
IWAM賬號建立後被Active Directory、IIS metabase數據庫和COM+應用程序三方
共同使用,賬號密碼被三方分別保存,並由操作系統負責這三方保存的IWAM密碼
的同步工作。按常理說,由操作系統負責的工作我們大可放心,不必擔心出錯,
但不知是BUG還是其它什麼原因,系統的對IWAM賬號的密碼同步工作有時會失敗,
使三方IWAM賬號所用密碼不統一。當IIS或COM+應用程序使用錯誤IWAM的密碼登錄
系統,啟動IIS Out-Of-Process Pooled Applications時,系統會因密碼錯誤而
拒絕這一請求,導致IIS Out-Of-Process Pooled Applications啟動失敗,也就
是我們在ID10004錯誤事件中看到的“不能運行服務器{3D14228D-FBE1-11D0-995
D-00C04FD919C1} ”(這裡{3D14228D-FBE1-11D0-995D-00C04FD919C1} 是IIS O
ut-Of-Process Pooled Applications的KEY),不能轉入IIS5應用程序,HTTP 5
00內部錯誤就這樣產生了。
三.解決辦法
知道了導致HTTP 500內部錯誤的原因,解決起來就比較簡單了,那就是人工同步
IWAM賬號在Active Directory、IIS metabase數據庫和COM+應用程序中的密碼。
具體操作分三步,均需要以管理員身份登錄計算機以提供足夠的操作權限(IWAM賬
號以IWAM_MYSERVER為例)。
(一)更改Active Directory中IWAM_MYSERVER賬號的密碼
因IWAM賬號的密碼由系統控制,隨機產生,我們並不知道是什麼,為完成下面兩
步的密碼同步工作,我們必須將IWAM賬號的密碼設置為一個我們知道的值。
1、選擇“開始”->“程序”->“管理工具”->"Active Directory用戶和計算機",
啟動“Active Directory用戶和計算機”管理單元。
2、單擊“user”,選中右面的“IWAM_MYSERVER”,右擊選擇“重設密碼(T)...”,
在跳出的重設密碼對方框中給IWAM_MYSERVER設置新的密碼,這兒我們設置成
“Aboutnt2001”(沒有引號的),確定,等待密碼修改成功。
(二)同步IIS metabase中IWAM_MYSERVER賬號的密碼
可能因為這項改動太敏感和重要,微軟並沒有為我們修改IIS metabase中IWAM_M
YSERVER賬號密碼提供一個顯式的用戶接口,只隨IIS5提供了一個管理腳本adsut
il.vbs,這個腳本位於C:\inetpub\adminscripts子目錄下(位置可能會因你安裝
IIS5時設置的不同而有所變動)。
adsutil.vbs腳本功能強大,參數非常多且用法復雜,這裡只提供使用這個腳本修
改IWAM_MYSERVER賬號密碼的方法:
adsutil SET w3svc/WAMUserPass Password
"Password"參數就是要設置的IWAM賬號的新的密碼。因此我們將IIS metabase中
IWAM_MYSERVER賬號的密碼修改為“Aboutnt2001”的命令就是:
c:\Inetpub\AdminScripts>adsutil SET w3svc/WAMUserPass "Aboutnt2001"
修改成功後,系統會有如下提示:
WAMUserPass: (String) "Aboutnt2001"
(三)同步COM+應用程序所用的IWAM_MYSERVER的密碼
同步COM+應用程序所用的IWAM_MYSERVER的密碼,我們有兩種方式可以選擇:一種
是使用組件服務MMC管理單元,另一種是使用IWAM賬號同步腳本synciwam.vbs。
1、使用組件服務MMC管理單元
(1)啟動組件服務管理單元:選擇“開始”->“運行”->“MMC”,啟動管理控
制台,打開“添加/刪除管理單元”對話框,將“組件服務”管理單元添加上。
(2)找到“組件服務”->“計算機”->“我的電腦”->“COM+應用程序”->“O
ut-Of-Process Pooled Applications”,右擊“Out-Of-Process Pooled Appli
cations”->“屬性”。
(3)切換到“Out-Of-Process Pooled Applications”屬性對話框的“標志”選
項卡。“此應用程序在下列賬戶下運行”選擇中“此用戶”會被選中,用戶名是
“IWAM_MYSERVER”。這些都是缺省的,不必改動。在下面的“密碼”和“確認密
碼”文本框內輸入正確的密碼“Aboutnt2001”,確定退出。
(4)系統如果提示“應用程序被一個以上的外部產品創建。你確定要被這些產品
支持嗎?”時確定即可。
(5)如果我們在IIS中將其它一些Web的“應用程序保護”設置為“高(獨立的)”,
那麼這個WEB所使用的COM+應用程序的IWAM賬號密碼也需要同步。重復(1)-
(4)步,同步其它相應Out of process application的IWAM賬號密碼。
2、使用IWAM賬號同步腳本synciwam.vbs
實際上微軟已經發現IWAM賬號在密碼同步方面存在問題,因此在IIS5的管理腳本
中單獨為IWAM賬號密碼同步編寫了一個腳本synciwam.vbs,這個腳本位於C:\ine
tpub\adminscripts子目錄下(位置可能會因你安裝IIS5時設置的不同而有所變動)。
synciwam.vbs腳本用法比較簡單:
cscript synciwam.vbs [-v|-h]
“-v”參數表示詳細顯示腳本執行的整個過程(建議使用),“-h”參數用於顯示
簡單的幫助信息。
我們要同步IWAM_MYSERVER賬號在COM+應用程序中的密碼,只需要執行
“cscript synciwam.vbs -v”即可,如下:
cscript c:\inetpub\adminscripts\synciwam.vbs -v
Microsoft (R) Windows Script Host Version 5.6
版權所有(C) Microsoft Corporation 1996-2000。保留所有權利。
WamUserName:IWAM_MYSERVER
WamUserPass:Aboutnt2001
IIS Applications Defined:
Name, AppIsolated, Package ID
w3svc, 0, {3D14228C-FBE1-11d0-995D-00C04FD919C1}
Root, 2,
IISHelp, 2,
IISAdmin, 2,
IISSamples, 2,
MSADC, 2,
ROOT, 2,
IISAdmin, 2,
IISHelp, 2,
Root, 2,
Root, 2,
Out of process applications defined:
Count: 1
{3D14228D-FBE1-11d0-995D-00C04FD919C1}
Updating Applications:
Name: IIS Out-Of-Process Pooled Applications Key: {3D14228D-FBE1-11D0-
995D-00C04FD919C1}
從上面腳本的執行情況可以看出,使用synciwam.vbs腳本要比使用組件服務的方
法更全面和快捷。它首先從IIS的metabase數據庫找到IWAM賬號"IWAM_MYSERVER"
並取出對應的密碼“Aboutnt2001”,然後查找所有已定義的IIS Applications和
Out of process applications,並逐一同步每一個Out of process applicatio
ns應用程序的IWAM賬號密碼。
使用synciwam.vbs腳本時,要注意一個問題,那就是在你運行synciwam.vbs之前,
必須保證IIS metabase數據庫與Active Directory中的IWAM密碼已經一致。因
為synciwam.vbs腳本是從IIS metabase數據庫而不是從Active Directory取得IW
AM賬號的密碼,如果IIS metabase中的密碼不正確,那synciwam.vbs取得的密碼
也會不正確,同步操作執行到“Updating Applications”系統就會報80110414錯
誤,即“找不到應用程序{3D14228D-FBE1-11D0-995D-00C04FD919C1}”。
好了,到現在為止,IWAM賬號在Active Directory、IIS metabase數據庫和COM+
應用程序三處的密碼已經同步成功,你的ASP程序又可以運行了!