HTTP 500 – 内部服务器错误之完全解决办法

如何解决与“HTTP 500 - Internal Server Error”HTTP 500 – 内部服务器错误)错误信息有关的问题

<script type="text/javascript"> var sectionFilter = "type != 'notice' && type != 'securedata' && type != 'querywords'"; var tocArrow = "/library/images/support/kbgraphics/public/en-us/downarrow.gif"; var depthLimit = 10; var depth3Limit = 10; var depth4Limit = 5; var depth5Limit = 3; var tocEntryMinimum = 1; </script> <script src="/common/script/gsfx/kbtoc.js?6" type="text/javascript"> </script> 概要

<script type="text/javascript"> loadTOCNode(1, 'summary'); </script> 以下错误信息表明,返回错误时承载网站的 Web 服务器出现问题:

HTTP 500 - Internal Server Error

本文介绍如何排除这些错误。本文主要面向网站管理员。这些错误产生的原因很多,并且可影响许多不同的系统配置。本文所述步骤必须由服务器上管理员组的成员执行。

遇到这些错误的最终用户应就此问题通知网站管理员。

尝试加载 Localstart.asp 文件时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script>
当网站的一个默认文档 Iisstart.asp 尝试加载 Localstart.asp 文件时,如果尝试访问此页面的用户不具有运行 Localstart.asp 文件中包含的脚本的正确权限,您会收到 HTTP 500 错误信息。如果清除显示友好 HTTP 错误信息复选框,将看到与下面的 HTTP 500 错误信息类似的信息:

Error Type:
Microsoft VBScript runtime (0x 800A 0046)
Permission denied:'GetObject'
/localstart.asp, line 19

出现此问题的原因是,Localstart.asp 文件中包含了使用 IIS Admin 对象访问元数据库的 Active Directory 服务接口 (ADSI) Visual Basic Scripting Edition (VBScript) 代码。出于安全考虑,只有本地 Administrators 组的成员才能访问元数据库。这种现象是设计导致的。

要解决此问题,请按照下列步骤操作:

1.

单击开始,指向程序,指向管理工具,然后单击 Internet 信息服务

2.

在控制台树中,单击默认网站。在显示窗格中,右键单击 Localstart.asp,然后单击属性

3.

文件安全选项卡的匿名访问和身份验证控制中,单击编辑

4.

身份验证方法属性页中,单击以清除匿名访问

 

浏览 ASP 页面时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> 当您浏览 Active Server Pages (ASP) 网页时,会收到“HTTP 500.100 - Internal Server Error - ASP error”错误信息。如果清除显示友好 HTTP 错误信息复选框,将在技术信息(用于支持人员)部分看到类似下面这样的信息:

Error Type:
Microsoft VBScript runtime (0x 800A 01F 4)
Variable is undefined:'x'
/OptionExplicitError.asp, line 9

Page:
GET /OptionExplicitError.asp

要解决此问题,请删除 Option Explicit 语句,或者使用 DIM 关键字声明变量。

要重现此问题,请在允许执行脚本的虚拟目录中运行包含以下代码的 ASP 文件:

<% Option Explicit %> <HTML> <HEAD> <TITLE>500-100 Undeclared Variable</TITLE> </HEAD> <BODY> <P>About to use an undeclared variable</P> <% x = 5 %> </B></P> </BODY> </HTML>

要修改此示例,请使用 DIM 语句声明 X 变量,如下所示:

<% Option Explicit %> <HTML> <HEAD> <TITLE>500-100 Undeclared Variable</TITLE> </HEAD> <BODY> <P>About to use an undeclared variable</P> <% DIM x x = 5 %> </B></P> </BODY> </HTML>

 

IIS 5.0 返回 Server.GetLastError 错误信息时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> 当某个 Web 应用程序或页面不可用时,IIS 会返回一个错误信息。其结果是自定义的 ASP 页面处理对服务器端脚本错误的响应。此页面返回状态“500 Internal Server Error”,这导致客户端远程脚本小程序不向远程脚本对象返回任何数据。

要解决此问题,请创建一个返回状态“200 OK”的自定义错误页面,然后在远程脚本服务器页面或应用程序的自定义错误部分引用此页面。为此,请按照下列步骤操作:

注意:可以为各个页面、整个应用程序或者整个网站或 Web 服务器设置此自定义错误页面。

1.

创建 %SystemRoot%/WinNT/Help/IISHelp/Common/500-100.asp 的副本,并将它存储在与原始文件相同的文件夹中。将新文件命名为 500-100-OK.asp

2.

单击开始,指向程序,指向附件,然后单击记事本

3.

在记事本中,单击文件菜单上的打开。在查找范围下拉框中,浏览到 500-100-OK.asp 文件,然后单击打开

4.

将下面的代码

Response.Status = "500 Internal Server Error"

替换为:

Response.Status = "200 OK"

注意:如果以前没修改过错误信息,则代码的原始行为第 12 行。

5.

文件菜单中,单击保存

6.

Internet 服务管理器的控制台树中,单击您的 Web 服务器。如果您的远程脚本 ASP 页面位于其中一个网站下的 Web 应用程序中,则展开您的 Web 应用程序。

7.

详细信息窗格中,右键单击您的远程脚本服务器 ASP 页面,然后单击属性

8.

单击自定义错误。在列表中,查找 500;100 的项。默认情况下,该项被设置为一个 URL 并引用 Help/Common/500-100.asp。单击编辑属性

9.

修改路径,使其指向 /IISHelp/Common/500-100-OK.asp,单击确定,然后再次单击确定

 

Alpha UNIX 上的文件分配类别时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> Alpha UNIX 上的文件分配类别时,会收到一个 HTTP 500 错误信息。

要解决此问题,请安装 Microsoft Office 2000 Service Release 1 (SR-1) Service Release 1a (SR -1a )。要下载 Office 2000 SR-1,请参见下面的 Microsoft 网站:

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=AF6C8D03-7633-45B4-AB96-795EE656F2A2 (http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=AF6C8D03-7633-45B4-AB96-795EE656F2A2)

 

500-100.asp 文件用于非默认网站上的错误处理时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> 500-100.asp 文件用于非默认网站上的错误处理时,会收到一个 HTTP 500 错误信息。

要解决此问题,请按照下列步骤操作:

1.

“Internet 信息服务管理单元的控制台树中,右键单击相应的网站,单击新建,然后单击虚拟目录

2.

虚拟目录创建向导中,单击下一步。在别名文本框中,键入 IISHelp,然后单击下一步

3.

当提示您输入内容文件夹的路径时,单击浏览,选择 WINNT/Help/IisHelp 文件夹,然后单击下一步

4.

访问权限页面中,接受所有默认值,单击下一步,然后单击完成

5.

再次右键单击网站,然后单击属性

6.

自定义错误选项卡中,选择 "500;100" 错误行,然后单击编辑属性

7.

信息类型列表框的 URL 文本框中,键入 /iisHelp/common/500-100.asp

8.

单击确定,然后再次单击确定

 

在索引服务器中执行查询时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> 单击开始在索引服务器中执行查询时,可能会收到一个 HTTP 500 错误信息。

出现此错误的原因是,没有为包含查询页面的文件夹定义默认的应用程序起始点。

要解决此问题,请按照下列步骤操作:

1.

“Internet 信息服务管理单元的控制台树中,右键单击包含查询页面的站点的根目录,然后单击属性

2.

主目录选项卡中,单击创建

3.

单击确定,然后重试查询。

 

ASP 页面中访问提供程序时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> 如果清除了显示友好 HTTP 错误信息复选框,当您尝试从 ASP 页面中访问提供程序时,可能会收到以下错误信息:

ADODB.Connection (0x 800A 0E 7A ) Provider cannot be found.It may not be properly installed./Nwind.asp, line 10

出现此错误的原因是,Microsoft 数据访问组件 (MDAC) 所需的动态链接库 (DLL) 尚未注册。

1.

单击开始,单击运行,然后键入 cmd

2.

在命令提示符下,键入 cd %systemroot%:/Program Files/Common Files/System/Ole

3.

在命令提示符下,键入 regsvr32 sqloledb.dll

4.

收到 DLL 成功注册的确认后,单击确定注意:此解决方案使用了 Microsoft SQL Server OLE Provider DLL (Sqloledb.dll) 作为示例。由于未注册的 DLL 可能会因使用的 OLE DB 提供程序而异,所以您必须根据具体情况修改步骤 2

 

IIS 5.0 上设置 COM+ 应用程序标识时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> 当您尝试在 IIS 5.0 上设置 COM+ 应用程序标识时,会收到一个 HTTP 500 错误信息。

COM+ 应用程序或 Microsoft Transaction Server (MTS) 程序包的标识被配置为交互式用户 - 当前已登录的用户时,会出现此问题。由于当前没有用户登录到 IIS 控制台,所以应用程序无法运行。

要解决此问题,请将 COM+ 应用程序或 MTS 程序包的标识设置为此用户,然后指定一个用户帐户。为此,请按照下列步骤操作:

1.

单击开始,指向程序,指向管理工具,然后单击组件服务

2.

在控制台树中,依次展开组件服务计算机我的电脑 COM+ 应用程序。查找希望更改其标识的应用程序。

3.

右键单击相应的 COM+ 应用程序,然后单击属性

4.

标识选项卡中,单击此用户,键入一个有效的计算机帐户,然后单击确定

IIS 4.0 上设置 MTS 应用程序标识时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> 当您在 IIS 4.0 上设置 MTS 程序标识时,会收到一个 HTTP 500 错误信息。

要解决此问题,请按照下列步骤操作:

1.

“Internet 信息服务管理单元中,依次展开计算机我的电脑 Microsoft Transaction Server。查找希望更改其标识的程序包。应用程序列在已安装的应用程序包文件夹中。

2.

右键单击该程序包,然后单击属性

3.

标识选项卡中,单击此用户,键入一个有效的帐户,然后单击应用

IIS 4.0 在自己的内存空间中运行时

<script type="text/javascript"> loadTOCNode(2, 'summary'); </script> 如果满足以下任一条件,就会收到 HTTP 500 错误信息:

IIS 4.0 的默认网站作为一个独立的进程在自己的内存空间中运行。

Microsoft Internet Explorer 被配置为在 Proxy Server 2.0 上使用 Web 代理服务器。

BackOffice Small Business Server 4.5 版上的 Internet Explorer 被配置为使用代理服务器,并且启用了代理服务器数据包筛选。

要解决此问题,请按照下列步骤操作:

1.

单击开始,指向程序,单击 Microsoft Proxy Server,然后单击 Microsoft 管理控制台

2.

在控制台树中,展开 Internet Information Server 文件夹,然后展开服务器对象。

3.

右键单击默认网站,然后单击属性

4.

主目录选项卡中,找到应用程序设置区域,然后单击以清除在单独的内存空间运行(独立进程)

5.

单击应用,然后单击确定

6.

右键单击默认网站,然后单击停止

7.

右键单击默认网站,然后单击启动




参考

<script type="text/javascript"> loadTOCNode(1, 'references'); </script> 有关显示友好 HTTP 错误信息选项的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

218155 (http://support.microsoft.com/kb/218155/) 超文本传输协议错误信息说明

有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

245025 (http://support.microsoft.com/kb/245025/) 如何获得并安装 Microsoft Office 2000 SR-1/SR -1a 更新


这篇文章中的信息适用于:

Microsoft Internet Information Server 4.0

Microsoft Internet Information Services 5.0

 

 

   

HTTP500 内部服务器错误修正办法

知道了导致 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_myserver 账号密码提供一个显式的用户接口,只随 iis5 提供了一个管理脚本 adsutil.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+ 应用程序 "->"out-of-process pooled applications" ,右击 "out-of-process pooled applications"->" 属性 "

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:/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) "*******"

 

IIS  Server Application Error  办法解决
英文错误码, “Server Application Error
The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.”
看日志是 MSTSC 相关的错误然后,
TransactionManager->GetWhereabouts 
失败。如果将分布式事务处理协调器配置为使用远程主机来协调事务,则可能是由于无法与远程主机取得联系。可以通过在组件服务  MMC  管理单元中单击  MSDTC  工具栏按钮,将  MSDTC  配置为使用本地协调器。由于此刻无法继续执行,服务器进程终止。
服务器应用程序  ID: {02D4B3F1-FD88-11D1-960D-00805FC79235}
服务器应用程序实例  ID:
{AD39EBA4-1977-4F45-BA32-64D56D640EAC}
服务器应用程序名 : System Application
错误代码 = 0x8004d01b :  事务管理器可用。
COM+ 
服务内部信息 :
文件 : d:/qxp_slp/com/com1x/src/comsvcs/txprop/dtcinfo.cpp   : 164
Comsvcs.dll 
文件版本 : ENU 2001.12.4414.258 shp 
 
按以前碰到过 http500 的错误方法来解决,方法:
4
、停止 MSDTC 服务: net stop msdtc (如果起动的话)
5
、卸载 MSDTC 服务: msdtc -uninstall
6
、重新安装 MSDTC 服务: msdtc -install
7
、确认在事件查看器中 msdtc 服务已经正常启动 [ 这步很关键,如果没有,重新启动下电脑看看 ]
8
、重新设置 IIS IWAM 账号密码。 [ 在计算机管理中的用户管理里 ]
9
、同步 IIS metabase IWAM_MYSERVER 的密码,在 CMD 中: c:/inetput/adminscripts>adsutil set w3svc/wamuserpass "yourpassword"
(注意:如果是第一次运行  Adsutil.vbs ,可能会收到 此脚本不适用于  WScript” 消息。单击确定,再单击是以将  CScript  注册为  VBscript  的默认主机,然后在声明  CScript  已注册成功的消息上单击确定。再次运行  Adsutil.vbs  命令。)
10
、同步 COM+ 应用程序所用的 IWAM_MYSERVER 密码,在 CMD 中: c:/inetput/adminscripts>cscript synciwam.vbs -v
重启 IIS 后,打开 IE 输入网址还是同样错误, “Server Application Error
The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.”
 
但是日志里的错误已经变了,没有 MSTSC 的错误了,而是 w3svr 的警告了:
 
服务器无法加载应用程序  '/LM/W3SVC/1/ROOT' 。错误是  ' 没有注册类别
'
 
在网上找一下这个警告的原因:找到解决方法,
[1]

    
检查你的 DTC 服务(全名: Distributed Transaction Coordinator )是否可以正常启动,如果正常的话,请你跳过此步骤;如果出错,无法正常启动,请在开始菜单的运行中  
运行: msdtc -resetlog
以创建日志文件。重起机器,检查 IIS 是否可以正常使用,若不行继续。

[2]

CMD 下执行以下命令:
cd %windir%/system32/inetsrv 
rundll32 wamreg.dll, CreateIISPackage 
regsvr32 asptxn.dll 
因为我的 MSDTC 已经正常了,直接从 [2] 开始做的:

CMD 下执行以下命令:
cd %windir%/system32/inetsrv 
rundll32 wamreg.dll, CreateIISPackage 
regsvr32 asptxn.dll

但是在最后 regsvr32 asptxn.dll  提示失败,于是想重启机器后看看,看日志里的警告也变以了是:

服务器无法加载应用程序  '/LM/W3SVC/1/ROOT' 。错误是  ' 不支持此接口 '

再次运行:
         cd %windir%/system32/inetsrv 

              rundll32 wamreg.dll, CreateIISPackage 

              regsvr32 asptxn.dll

DLL
终于成功注册了,重启 IIS 或者重启机器后,终于能访问 ASP 页面了, IIS 正常。

参考了网上不少资料,最后给大家一个提示,碰到问题一定要从日志入手,然后从网上查找资料,每个人碰到的问题可能略有不同,经过一番努力还是能解决的。

 

 

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值