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程序又可以運行了!

*********************************************************************************************

參考上面介紹的方法,卻發現:
(1)在XP HOME 中,選擇“開始”->“程序”->“管理工具”,無法找到>"Active Directory用戶和計算機”選項,
更別說修改密碼了。於是,查找資料,採用如下方法,
在“開始”-“運行”中輸入"rundll32 netplwiz.dll,UsersRunDll",(引號以內的是運行的命令,注意字母的大小寫),點確定。
在出現的用戶帳號中選擇“IWAM_MYSERVER”(隨計算機名稱不同而不同,但“IWAM_ ”是不變的前綴),點擊選擇“重設密碼(T)...”,在跳出的重設密碼對方框中給IWAM_MYSERVER設置新的密碼,這兒我們設置成“Aboutnt2001”(沒有引號的),確定,等待密碼修改成功。
(2)運行啓動組件服務管理單元:選擇“開始”->“運行”->“MMC”,啓動管理控制檯,打開“添加/刪除管理單元”對話框,將“組件服務”管理單元添加上。
  找到“組件服務”->“計算機”->“我的電腦”->“COM+應用程序”-時,無法打開COM+,DCOM等組件。
查閱大量英文資料,終於找到原來是系統的一個BUG,不支持雙字節的計算機名稱,因爲我們的計算機名稱爲漢字,所以造成這種現象,
將計算機名稱該爲字母和數字組合,一切OK。
然後,按照上面網上的方法,將密碼進行同步,運行HTTP://LOCALHOST,卻仍然出現The requested resource is in use的錯誤提示,
在事件查看器中,可以看到:

應用程序-特定 權限設置未將 COM 服務器應用程序(CLSID 爲
{A9E69610-B80D-11D0-B9B9-00A0C922E750}
)的 本地 激活 權限授予用戶 IBM-D882681D063/IWAM_IBM-D882681D063 SID (S-1-5-21-1304240173-3011969147-3728014682-1013)。可以使用組件服務管理工具修改此安全權限。

有關更多信息,請參閱在 http://go.microsoft.com/fwlink/events.asp">http://go.microsoft.com/fwlink/events.asp 的幫助和支持

最後又查閱了大量的英文資料,採用如下的方法:
點擊“開始”-“控制面板”-“管理工具”-“組件服務”-“計算機”-“我的電腦”-“DCOM”選項,
選擇其下的“IIS ADMIN SERVICE”,右健選擇“屬性”,找到“安全”,在“啓動和激活權限”中編輯“自定義”,添加帳號“IWAM_*****”,
給該帳號賦予“本地啓動”和“本地激活”的權限,重新啓動IIS,(點“開始”-“運行”-“CMD”,點確定,然後運行IISRESET),
運行HTTP://LOCALHOST,OK。

參考信息:
1、密碼同步:http://support.microsoft.com/default.aspx?scid=kb;zh-cn;297989
2、雙字節計算機名稱:http://support.microsoft.com/default.aspx?scid=kb;en-us;895200

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章