Posted: 2004/5月/29 5:19下午 | IP記錄
|
|
|
一.錯誤表現 IIS5的HTTP 500內部服務器錯誤是我們經常碰到的錯誤之一,它的主要錯誤表現 就是ASP程序不能瀏覽但HTM靜態網頁不受影響。另外當錯誤發生時,系統事件日 志和安全事件日誌都會有相應的記錄。
具體如下: (一)IE中的表現 當瀏覽以前能夠正常執行的asp頁面時會出現如下的錯誤:
網頁無法顯示 您要訪問的網頁存在問題,因此無法顯示。 請嘗試下列操作: 打開 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.&n bsp;Please refer to the event log&n bsp;for mo re detail information. Please contact&nb sp;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 聯機支持站點: 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 Applicatio ns啟動失敗,也就 是我們在ID10004錯誤事件中看到的「不能執行服務器{3D14228D-FBE1-11D0-995 D-00C04FD919C1} 」(這裡{3D14228D-FBE1-11D0-995D-00C04FD919 C1} 是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/WAMUs erPass "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-Proce ss 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 V ersion 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 Applicat ions 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 Directo ry取得IW AM帳號的密碼,如果IIS metabase中的密碼不正確,那synciwam.vbs取得的密碼 也會不正確,同步操作執行到「Updating Applications」系統就會報80110414錯 誤,即「找不到應用程序{3D14228D-FBE1-11D0-995D-00C04FD919C1}」。
好了,到現在為止,IWAM帳號在Active Directory、IIS metabase資料庫和C OM+ 應用程序三處的密碼已經同步成功,你的ASP程序又可以執行了!
|