部署网站:500 - 内部服务器错误

Deploying website: 500 - Internal server error

提问人:Jacob Jedryszek 提问时间:3/22/2011 最后编辑:CommunityJacob Jedryszek 更新时间:6/21/2022 访问量:636652

问:

我正在尝试部署 ASP.NET 应用程序。我已将站点部署到 IIS,但是当使用浏览器访问它时,它向我显示:

服务器错误

500 - 内部服务器错误。

您要查找的资源有问题,无法显示。

在摆弄了web.config之后,我得到了:

由于发生内部服务器错误,无法显示该页面。

如何查看此服务器错误背后的实际问题?

asp.net IIS 错误处理

评论

2赞 sajoshi 3/22/2011
确保在目录上为 MVC 应用程序设置了通配符映射...

答:

340赞 Aristos 3/22/2011 #1

首先,您需要启用并查看 Web 消息的详细错误,因为这是一条一般消息,出于安全原因,没有提供有关实际情况的信息。

通过详细的错误,您可以在此处找到真正的问题。

此外,如果您可以在服务器上运行浏览器,您将获得有关错误的详细信息,因为服务器会识别出您是本地人并显示给您。或者,如果可以使用事件查看器读取服务器的日志,则还会看到错误的详细信息。

###On IIS 6

<configuration>
    <system.web>
        <customErrors mode="Off"/>
        <compilation debug="true"/>
    </system.web>
</configuration>

###On IIS 7

<configuration>
    <system.webServer>
        <httpErrors errorMode="Detailed" />
        <asp scriptErrorSentToBrowser="true"/>
    </system.webServer>
    <system.web>
        <customErrors mode="Off"/>
        <compilation debug="true"/>
    </system.web>
</configuration>

注意:您可以避免 Debug=true。您只需要暂时关闭自定义错误,即可获得详细的错误页面。

这可以帮助:如何启用详细的错误消息(来自 IIS)。

评论

13赞 jaseeey 11/10/2014
谢谢你的帖子!为我做的部分是:<httpErrors errorMode=“Detailed” />
6赞 Rajshekar Reddy 11/14/2016
run the browser on the server为我工作..谢谢兄弟
2赞 Aristos 8/3/2017
@Learning是的 - 您仅在短时间内启用详细错误,以便能够找到您的一些错误并使您的应用程序运行 - 然后将其关闭
2赞 Vadim Tofan 1/4/2019
谢谢,从IIS启用详细的错误消息有所帮助。
2赞 vicky 7/12/2021
只需在 <system.webServer 中添加 <httpErrors errorMode=“Detailed” />>
26赞 Joshua Frank 2/3/2012 #2

我在这个问题上拔掉了头发。确保以下条目在根文件中,为我修复了它:web.config

<configuration>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  </system.webServer>
</configuration>

请记住,如果现有 XML 元素已存在,则必须将其添加到现有 XML 元素中。你不能只在文件的末尾添加,因为你不能有任何元素的多个副本。

10赞 Van Thi 4/7/2012 #3

就我而言,我在我的文件中放了一个错误。应用程序密钥以某种方式放在 <appSettings> 标记下。但我想知道为什么它没有显示配置错误。错误 500 对于调查问题来说太笼统了。web.config

评论

0赞 Avni Yayin 7/25/2018
只是在这里也有同样的情况。web.config 被错误地复制到子目录并导致 weired 错误,尽管我将“显示详细错误”设置为 true。
8赞 kenswdev 1/1/2013 #4

我第一次尝试发布然后运行一个非常简单的网站,只提供 HTML,结果显示“页面无法显示,因为发生了内部服务器错误。

问题:我在 Visual Studio 中将网站设置为 .NET 3.5(右键单击网站项目 -> 属性页 -> Build),但将 Azure 中的网站配置为 .NET 4.0。哎呀!我在 Azure 中将其更改为 3.5,它起作用了。

11赞 Manish kumar 3/23/2013 #5

我终于解决了在 godaddy.ocm 共享主机上部署 ASP.NET MVC 3.0 应用程序时的“500 内部服务器”错误。

不知何故,引用的DLL文件的版本与文件中提到的版本存在差异。web.config

我尝试了各种论坛中提到的所有选项。没有任何帮助,尽管每个人都提出了相同的修复方法,但不知何故,它在我的场景中不起作用。终于在敲了两天的头之后。 我决定删除所有DLL文件引用,并从项目中删除web.cofig(制作本地副本),让应用程序抛出错误,然后逐个添加DLL文件,将副本复制到local=true。

添加所有 DLL 文件后,我创建了一个新的 ASP.NET MVC 应用程序,并将新应用程序的 web.config 复制到我的实际应用程序中。 因此,我的实际应用程序现在有一个新的 web.config,然后我从我保存的 web.config 的本地副本中复制了连接字符串和其他引用。

我只是编译了应用程序并发布到本地文件夹 并将发布的文件夹通过FTP传输到goDaddy。

它奏效了,最后我的问题得到了解决。

评论

0赞 Per G 6/26/2013
我的错误通过以下方式解决:stackoverflow.com/questions/11359957/...还必须安装 Elmah
2赞 2 revs, 2 users 64%Tushar Tyagi #6

500内部错误
Windows Hosting错误

Godaddy托管问题

我一直面临同样的问题,但现在我的问题已经解决。始终在此托管中使用,这是有效的。

我还建议大家对 web.config 文件进行任何更改。请一一进行,并在实时域上进行相同的测试,以便您可以找到确切的问题或托管服务提供商不允许您使用的功能。

<?xml version="1.0"?>

<configuration>
    <system.web>
        <trust level="Medium"/>
        <compilation debug="true" targetFramework="4.5">
            <assemblies>
                <add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            </assemblies>
        </compilation>

        <httpRuntime targetFramework="4.5" />
        <sessionState mode="InProc" cookieless="false" timeout="90" />
        <authentication mode="Forms">
            <forms loginUrl="default.aspx"  
                   defaultUrl="default.aspx"
                   protection="All"
                   cookieless="UseCookies"
                   slidingExpiration="false"
                   timeout="30"
                   name="aeon.corpusjuris.in" />
        </authentication>

        <customErrors 
            mode="Off" 
            defaultRedirect="errorpage.aspx">

            <error statusCode="403" redirect="errorpage.aspx"/>
            <error statusCode="404" redirect="errorpage.aspx"/>
        </customErrors>

        <!--  <httpModules>
                <add name="HTTPCaching" type="HTTPCaching"/>
            </httpModules>
        -->
    </system.web>

    <runtime>
        <performanceScenario value="HighDensityWebHosting"  />
    </runtime>

    <system.webServer>
        <!--  <modules runAllManagedModulesForAllRequests="true">
                <add name="HTTPCaching" type="HTTPCaching"/>
            </modules>
        -->

        <defaultDocument>
            <files>
                <clear />
                <add value="default.aspx" />
            </files>
        </defaultDocument>

        <httpErrors errorMode="Detailed" />
        <asp scriptErrorSentToBrowser="true"/>

        <staticContent>
            <clientCache cacheControlCustom="public"
                         cacheControlMaxAge="60:00:00"
                         cacheControlMode="UseMaxAge" />
        </staticContent>
    </system.webServer>

    <system.web.extensions>
         <scripting>
             <webServices>
                 <jsonSerialization maxJsonLength="90000000">
                 </jsonSerialization>
             </webServices>
         </scripting>
    </system.web.extensions>

</configuration>

评论

1赞 aLx13 12/5/2017
就我而言,错误是由 web.config 中的 <httpRuntime enableVersionHeader=“false” /> 引起的
12赞 user3638709 5/15/2014 #7

对我来说,web.config 中的以下代码是罪魁祸首。当我删除它时,该网站运行良好。

  <staticContent>
    <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
  </staticContent>

评论

2赞 panky sharma 4/2/2019
谢谢。。对我有用,但是显示视频需要 mimeMap 吗?
2赞 TruthOf42 10/27/2020
这个“修复”是针对一个非常具体的问题,OP 要求一个不包括的一般答案
6赞 lapsus 7/3/2014 #8

如果物理主目录(即IIS_IUSRS无权访问)的权限不足,IIS 还会报告状态代码 500,而没有任何事件日志提示。

6赞 ErikE 8/13/2014 #9

除了其他建议之外,请确保将节点的属性更改为 from ,或完全删除该属性。existingResponsehttpErrorsAutoReplace

<httpErrors existingResponse="Replace" />
                              ^^^^^^^ not going to work with this here
2赞 Manish 9/6/2014 #10

500 内部服务器错误可能由于多种原因而出现。第一个原因可能是 web.config 文件未正确创建,这意味着您错过了 web.config 文件中的某些标记。其次,此错误可能是由于某些代码问题造成的。若要检查 Web 应用程序的哪个组件导致了此错误,可以检查 web.config 文件中的应用程序设置。这里给出了解决和跟踪 500 个内部服务器错误的详细信息:

7赞 ThanGio 9/24/2014 #11

服务器错误 500 - 内部服务器错误。 您要查找的资源有问题,无法显示。戈达迪。托管 - 网络 - 经济 - Windows Plesk

就我而言,我替换了以下代码:

<configuration> 
  <system.webServer> 
    <httpErrors errorMode="Detailed" /> 
    <asp scriptErrorSentToBrowser="true"/> 
  </system.webServer> 
  <system.web> 
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web> 
</configuration>

然后将框架 3.5 更改为框架 4。它显示了我的详细错误。我删除了以下代码:

<httpModules></httpModules>

它解决了我的问题。

评论

1赞 SharpC 2/12/2021
我在阅读了其他提示后添加了,但在单独的而不是组合的行上,感谢您帮助我发现这一点。<compilation debug="true" <compilation targetFramework=
1赞 Kurkula 10/26/2014 #12

确保您的帐户使用 IIS 7。有关详细信息,请参阅自定义 Windows 主机帐户上的 IIS 设置。 按照更改 Windows IIS 7 托管帐户上的管道模式中的说明进行操作。选择集成流水线模式。 在“项目引用”部分中,将以下程序集的“复制本地”设置为“True”:

System.Web.Abstractions
System.Web.Helpers
System.Web.Routing
System.Web.Mvc
System.Web.WebPages

将以下程序集添加到项目中,然后将“复制本地”设置为“True”:

Microsoft.Web.Infrastructure
System.Web.Razor
System.Web.WebPages.Deployment
System.Web.WebPages.Razor
Publish your application.
3赞 Eduardo Pelais 3/11/2015 #13

可能您的 web.config 文件是错误的或缺少一些标记。我使用 .NET 4 的正确配置标记解决了我的问题。

<system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
        <assemblies>
            <add assembly="System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        </assemblies>
    </compilation>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
        <namespaces>
            <clear/>
            <add namespace="System"/>
            <add namespace="System.Collections"/>
            <add namespace="System.Collections.Specialized"/>
            <add namespace="System.Configuration"/>
            <add namespace="System.Text"/>
            <add namespace="System.Text.RegularExpressions"/>
            <add namespace="System.Web"/>
            <add namespace="System.Web.Caching"/>
            <add namespace="System.Web.SessionState"/>
            <add namespace="System.Web.Security"/>
            <add namespace="System.Web.Profile"/>
            <add namespace="System.Web.UI"/>
            <add namespace="System.Web.UI.WebControls"/>
            <add namespace="System.Web.UI.WebControls.WebParts"/>
            <add namespace="System.Web.UI.HtmlControls"/>
        </namespaces>
    </pages>
    <authentication mode="None"/>
</system.web>
1赞 user3745869 3/17/2015 #14

有时,原因可能是其中一个 .dll 程序集未在服务器上正确注册。

例如,您可以在安装了 Office 的本地计算机上成功运行 C# Excel Web 应用程序,同时在服务器部署时收到 500 错误,因为服务器上没有安装 Office 套件,因此会出现服务器错误。

3赞 mark kasina 9/30/2015 #15

我意识到服务器中文件和文件夹的权限也很重要。我从 linux 操作系统上传了我的文件,通常读取和写入的权限受到限制。所以上传时,权限仍然与本地机器相同。

我遇到了同样的错误,我只是更改了我上传的文件夹的权限,错误消失了。

希望它对某人有所帮助。

评论

1赞 Wai Ha Lee 9/30/2015
这个答案不是和2014年7月的这个答案基本一样吗?
1赞 Sergio R 1/21/2016 #16

在更改文件之前,我会检查您使用的版本是否与您的设置(ASP.Net 设置)完全相同(我的意思是,4.5 != 4.5.2)。这应该会自动将您的 web.config 文件更改为正确的框架。

另请注意,目前(1 月 16 日)与 和 一起使用。若要与 Visual Studio 一起使用,它必须是或更高版本,如果不是 2015,则必须下载并安装 .NET Framework 4.5.2 开发人员包。

如果仍然不起作用,那么是的,下一步应该是启用详细的错误报告,以便您可以对其进行调试。
web.config.NET FrameworkGoDaddyPlesk panelGoDaddyASP.Net 3.54.5.24.5.22012

1赞 Tomas Kubes 10/28/2016 #17

对于那些有这种可能性的人(VPS托管而不是虚拟主机):

通过远程桌面连接到您的托管服务器。从远程桌面打开 Web 浏览器,您将看到错误的详细描述。

无需修改 web.config 或向其他任何人公开任何详细信息。

2赞 Protector one 11/9/2016 #18

如果使用的是自定义 HttpHandler(即实现),请确保检查对其方法的调用。IHttpModuleError

你可以让你的处理程序在本地调试期间抛出实际的(它有一个有用的属性),如下所示:HttpExceptionsMessage

    public void Error(object sender, EventArgs e)
    {
        if (!HttpContext.Current.Request.IsLocal)
            return;
        var ex = ((HttpApplication)sender).Server.GetLastError();
        if (ex.GetType() == typeof(HttpException))
            throw ex;
    }

此外,请确保检查异常的 .InnerException

1赞 Steve Woods 2/1/2017 #19

如果您使用的是 IIS 8.5,则可能需要将 ApplicationPool ID 设置从 ApplicationPoolId 更改为 NetworkService

右键单击有问题的应用程序池,单击“高级设置”,然后向下滚动到 ID - 它可能会设置为 ApplicationPoolIdentity。单击按钮 (..),然后从下拉列表中选择 NetworkService

此外,请确保如果它是 .NET 2.0 应用程序,则未在应用程序池中引用 4.0 框架。

5赞 JIANG 5/10/2017 #20

对于 IIS 10除了更改 customErrors=Off 以显示错误内容之外,还有一个额外的步骤要执行。

<system.web>
   <customErrors mode="Off" />
</system.web>
<system.webServer>
   <httpErrors existingResponse="PassThrough" errorMode="Detailed"/>
</system.webServer>

Raul 回答了此链接中的问题 关闭 IIS8 自定义错误 by 劳尔

评论

2赞 Marcus Parsons 4/23/2020
此解决方案是 IIS 10.0.14393.0 所需要的。
0赞 Billy Ray Valentine 4/24/2022
为我工作,IIS 10,Windows Server 2016,ASP.NET MVC 5,.NET 4.7 - 尝试了其他所有方法,但没有任何效果。状态为 500 的部分视图错误响应和从服务器返回的自定义错误,但当它在本地工作正常时,它在实时服务器上返回上述错误。添加 httpErrors 节点是票证。好东西。
1赞 Achintya 9/27/2019 #21

我最近遇到了同样的问题,服务器上的磁盘空间已满。清理一些空间已解决问题。

-1赞 mike g 10/29/2019 #22

尝试在调试模式下(在 Visual Studio 中)进行编译。如果您处于发布模式,则许多 URL 重写错误将不可用。

图像显示了 Visual Studio 中的“调试选择”组合框

在此处输入图像描述