複製鏈接
請複製以下鏈接發送給好友

HTTP-500錯誤

鎖定
HTTP-500錯誤(HTTP-Internal Server Error),説明IIS服務器無法解析ASP代碼,訪問一個靜態頁面試試是否也出現這個問題。
如果訪問靜態頁面沒問題,那就要分以下幾種 情況來分析了: ① 你是否改變過計算機名稱。 ② 站點所在的文件目錄是否自定義了安全屬性。 ③ 安裝了域控制器後是否調整了域策略。如果是其中的一種情況,請一一將 改變的參數設置回來看是否解決問題。 如果靜態空間也無法訪問,則説明解析還沒生效。
中文名
HTTP-500錯誤
外文名
HTTP-Internal Server Error
對    象
服務器出錯
類    別
網頁軟件
產生原因
服務器不支持的組件

目錄

HTTP-500錯誤簡介

首先你要確定錯誤的原因:
讓IE顯示詳細的出錯信息:菜單--工具--Internet選項--高級--顯示友好的HTTP錯誤信息,去掉這個選擇吧,然後刷新出錯頁,就可以看到詳細的出錯信息,對幫助你確定錯誤所在非常有幫助! [1] 
造成500錯誤常見原因有:ASP語法出錯、ACCESS數據庫連接語句出錯、文件引用與包含路徑出錯(如未啓用父路徑)、使用了服務器不支持的組件如FSO等。
另解釋:xp下ⅡS5.1無法執行ASP文件,錯誤!500 內部連接錯誤|解決方法。

HTTP-500錯誤原因分析

綜合分析上面的錯誤表現我們可以看出,主要是由於iwam賬號的密碼錯誤造成了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啓動失敗,不能轉入iis5應用程序,http 500內部錯誤就這樣產生了。
解決辦法
知道了導致http 500內部錯誤的原因,解決起來就比較簡單了,那就是人工同步iwam賬號在active directory、iis metabase數據庫和com+應用程序中的密碼。
具體操作分三步,均需要以管理員身份登錄計算機以提供足夠的操作權限(iwam賬號以iwam_myserver為例)。
(一)更改active directory中iwam_myserver賬號的密碼
因iwam賬號的密碼由系統控制,隨機產生,我們並不知道是什麼,為完成下面兩步的密碼同步工作,我們必須將iwam賬號的密碼設置為一個我們知道的值。
⒈選擇“開始”->;“程序”->;“管理工具”->"active directory用户和計算機",啓動“active directory用户和計算機”管理單元。
⒉單擊“user”,選中右面的“iwam_myserver”,右擊選擇“重設密碼(t)...”,在跳出的重設密碼對方框中給iwam_myserver設置新的密碼,這兒我們設置成“aboutnt2001”(沒有引號的),確定,等待密碼修改成功。
(二)同步iis metabase中iwam_myserver賬號的密碼
可能因為這項改動太敏感和重要,微軟並沒有為我們修改iis metabase中iwam_myserver賬號密碼提供一個顯式的用户接口,只隨iis5提供了一個管理腳本adsutil.
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。
⒈使用組件服務mmc管理單元
⑴啓動組件服務管理單元:選擇“開始”->;“運行”->;“mmc”,啓動管理控制枱,打開“添加/刪除管理單元”對話框,將“組件服務”管理單元添加上。
⑵找到“組件服務”->;“計算機”->;“我的電腦”->;“com+應用程序”->;“out-of-process pooled applications”,右擊“out-of-process pooled applications”->;“屬性”。
⑶切換到“out-of-process pooled applications”屬性對話框的“標誌”選項卡。“此應用程序在下列賬户下運行”選擇中“此用户”會被選中,用户名是“iwam_myserver”。這些都是缺省的,不必改動。在下面的“密碼”和“確認密碼”文本框內輸入正確的密碼“aboutnt2001”,確定退出。
⑷系統如果提示“應用程序被一個以上的外部產品創建。你確定要被這些產品支持嗎?”時確定即可。
⑸如果我們在iis中將其它一些web的“應用程序保護”設置為“高(獨立的)”,那麼這個web所使用的com+應用程序的iwam賬號密碼也需要同步。重複⑴-⑷步,同步其它相應out of process application的iwam賬號密碼。
⒉使用iwam賬號同步腳本synciwam.vbs
實際上微軟已經發現iwam賬號在密碼同步方面存在問題,因此在iis5的管理腳本中單獨為iwam賬號密碼同步編寫了一個腳本synciwam.vbs,這個腳本位於c:\inetpub\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 applications應用程序的iwam賬號密碼。
使用synciwam.vbs腳本時,要注意一個問題,那就是在你運行synciwam.vbs之前,必須保證iis metabase數據庫與active directory中的iwam密碼已經一致。因為synciwam.vbs腳本是從iis metabase數據庫而不是從active directory取得iwam賬號的密碼,如果iis metabase中的密碼不正確,那synciwam.vbs取得的密碼也會不正確,同步操作執行到“updating applications”系統就會報80110414錯誤,即“找不到應用程序3d14228d-fbe1-11d0-995d-00c04fd919c1}”。
好了,到此為止,iwam賬號在active directory、iis metabase數據庫和com+應用程序三處的密碼已經同步成功,你的asp程序又可以運行了!
修改成功後,系統會有如下提示:
---------------------------------------------------
經過測試,顯示應該是
wamuserpass: (string) "*******"
http 500內部服務器錯誤可能和ⅡS 服務器無法加載應用程序有關具體是:
現象:
瀏覽ASP時 HTTP500內部錯誤
[解決ⅡS 服務器無法加載應用程序 '/LM/W3SVC/1/ROOT' 錯誤是 '沒有註冊類別
查看了一下事件查看器
[1]:服務器無法加載應用程序 '/LM/W3SVC/1/ROOT'。錯誤是 '沒有註冊類別'。
[2]:無法啓動 MS DTC 事務管理器。
[3]:MS DTC 事務管理器啓動失敗。LogInit 返回錯誤 0x2。
[4]: 找不到 MS DTC 日誌文件。在確認所有由 MS DTC 協調的資源管理器不具有“不確定”狀態的事務之後,請運行 msdtc -resetlog 創建日誌文件。
解決辦法:
[1]:檢查你的DTC服務(Distributed Transaction Coordinator)是否可以正常啓動,如果正常的話請你跳過此步驟;如果出錯,無法正常啓動,請在開始菜單的運行中 運行:msdtc -resetlog以創建日誌文件。重起機器檢查ⅡS是否可以正常使用,若不行繼續。
[2]:在CMD(.bat)下執行以下命令:
開始菜單->;運行->cmd打開命令提示窗口。
輸入cd %windir%/system32/inetsrv切換到了system32下inetsrv目錄。
再輸入rundll32 wamreg.dll,CreateIISPackage。(這裏小寫的時候是:createiispackage)
注意:必須準確鍵入“CreateIISPackage”,它區分大小寫。
再輸入regsvr32 asptxn.dll。
關閉"組件服務"並重新打開"組件服務"。
重啓ⅡS:"管理工具"-"服務"找到IIS Admin右擊選擇"重新啓動".
最後打開“管理工具”->;“internet信息服務”找到“默認網站”然後右擊它,
選擇屬性,在“TCP地址”處選擇本機的IP地址,(這裏可選可不選)。再打開“目錄安全性”->;“編輯”彈出“身份驗證方法對話框”
//這裏比較麻煩點。下面説起來有點難,如果上面都對,那100%是下面的問題,如
果這裏設置不到,打開網頁時,將彈出一個對話框確認後出現“未登陸,無權訪
問”,又或者顯示那一行出現錯誤等。/ /
點擊“瀏覽”->;“高級”->;“立即查找”在下框選擇一個能用的用户(如當前用户),然後確定。(這裏一般可以省略,按默認的用户就可)
在“匿名訪問”處打勾,“允許IIS控制密碼”不打勾,密碼(你剛才選擇的用户
的密碼,無密碼為空,確定密碼也為空)。"基本....."不打勾,"集成....."處打
勾。然後剛在“匿名訪問”處打過勾的又不打勾了。
確定後,先按“應用”會出現一條信息“localstart.asp”(其它文件不要選),
用鼠標“點擊選擇它”(記住,其實就是這裏沒有選擇),再確定。
重新進入剛才的“身份驗證方法對話框”,在“匿名訪問”處重新打勾再“應用”,如出現之前我説的那條信息再點擊選擇它,再確定,即可完成了。
參考資料
  • 1.    Fisher, Tim. "500 Internal Server Error". Lifewire. Retrieved February 22, 2017.