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

Posted

技术标签:

【中文标题】部署网站:500 - 内部服务器错误【英文标题】:Deploying website: 500 - Internal server error 【发布时间】:2011-07-20 03:12:29 【问题描述】:

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

服务器错误

500 - 内部服务器错误。

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

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

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

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

【问题讨论】:

确保在目录中为 MVC 应用程序设置了通配符映射... 【参考方案1】:

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

有了详细的错误,你可以在这里找到真正的问题。

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

开启IIS 6

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

在 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。只需要关闭自定义错误片刻,即可得到详细的错误页面。

参考:Enabling Windows custom error messaging在Go Daddy's帮助文章中。

另外,这可以提供帮助:How to enable the detailed error messages(来自 IIS)。

【讨论】:

感谢您的帖子!为我做的部分是: @codemonkeyliketab 必须相同...或相似...如果您在计算机上运行 iis express,请打开您的 EventViewer... run the browser on the server 为我工作.. 谢谢兄弟 @Learning 是的 - 您只在短时间内启用详细错误,以便能够找到您的一些错误并使您的应用程序运行 - 然后您将其关闭 谢谢,从 IIS 启用详细的错误消息很有帮助。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

谢谢 .. 为我工作,但显示视频需要 mimeMap 吗? 这个“修复”是针对一个非常具体的问题,OP 要求一个一般性的答案,这不包括【参考方案4】:

在 godaddy.ocm 共享主机上部署 ASP.NET MVC 3.0 应用程序时,我终于解决了这个“500 Internal server”错误。

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

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

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

我刚刚编译了应用程序并发布到本地文件夹 并将发布的文件夹 FTP 到 goDaddy。

成功了,我的问题终于解决了。

【讨论】:

我的错误解决了:***.com/questions/11359957/… 还必须安装 Elmah【参考方案5】:

就我而言,我在web.config 文件中输入了一个错误。应用程序密钥不知何故被放在 标记下。但我想知道为什么它不显示配置错误。错误 500 过于笼统,无法调查问题。

【讨论】:

这里也一样。 web.config 被错误地复制到子目录并导致出现错误,尽管我将“显示详细错误”设置为 true。【参考方案6】:

我第一次尝试发布然后运行一个仅提供 html 的非常简单的网站,结果显示“由于发生内部服务器错误,该页面无法显示。”

问题:我在 Visual Studio 中将站点设置为 .NET 3.5(右键单击网站项目 -> 属性页 -> 构建),但将 Azure 中的网站配置为 .NET 4.0。哎呀!我在 Azure 中将其更改为 3.5,并且可以正常工作。

【讨论】:

【参考方案7】:

除了其他建议之外,请务必将 httpErrors 节点的 existingResponse 属性从 Replace 更改为 Auto,或完全删除该属性。

<httpErrors existingResponse="Replace" />
                              ^^^^^^^ not going to work with this here

【讨论】:

【参考方案8】:

服务器错误 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>

它解决了我的问题。

【讨论】:

我在阅读了其他提示后添加了 &lt;compilation debug="true" ,但添加到 &lt;compilation targetFramework= 的单独而不是合并行中,感谢您帮助我发现这一点。【参考方案9】:

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

【讨论】:

【参考方案10】:

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

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

Raul 在此链接中回答了问题Turn off IIS8 custom errors by Raul

【讨论】:

这个解决方案是 IIS 10.0.14393.0 所需要的。【参考方案11】:

可能您的 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>

【讨论】:

【参考方案12】:

我意识到您服务器中文件和文件夹的权限也很重要。我从 linux 操作系统上传了我的文件,通常权限是有限的读写。所以上传的时候,权限还是和本地机器一样。

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

希望对某人有所帮助。

【讨论】:

这个答案不是和this answer from July 2014基本一样吗?【参考方案13】:

500 内部错误 Windows 主机错误 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>

【讨论】:

在我的情况下,错误是由 web.config 中的 引起的【参考方案14】:

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

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

    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

【讨论】:

【参考方案15】:

500 内部服务器错误可能由多种原因引起。第一个原因可能是 web.config 文件没有正确创建,这意味着您错过了 web.config 文件中的一些标签。其次,此错误可能是由于某些代码问题造成的。要检查 Web 应用程序的哪个组件导致此错误,您可以检查 web.config 文件中的应用程序设置。 500内部服务器错误的解决和跟踪的细节图如下:

【讨论】:

【参考方案16】:

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

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

将以下程序集添加到您的项目中,然后将 Copy Local 设置为 True:

Microsoft.Web.Infrastructure
System.Web.Razor
System.Web.WebPages.Deployment
System.Web.WebPages.Razor
Publish your application.

【讨论】:

【参考方案17】:

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

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

【讨论】:

【参考方案18】:

对于那些有这种可能性的人(VPS 托管而不是网络托管):

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

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

【讨论】:

【参考方案19】:

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

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

如果它是 .NET 2.0 应用程序,请确保您没有在应用程序池中引用 4.0 框架。

【讨论】:

【参考方案20】:

在更改web.config 文件之前,我会检查您使用的.NET Framework 版本与GoDaddy 设置(ASP. Plesk panel 中的网络设置)。这应该会自动将您的 web.config 文件更改为正确的框架。 另请注意,目前(2016 年 1 月),GoDaddyASP.Net 3.54.5.2 一起使用。要将 4.5.2 与 Visual Studio 一起使用,它必须是 2012 或更新版本,如果不是 2015,则必须下载并安装 .NET Framework 4.5.2 开发人员包。 如果仍然无法正常工作,那么是的,您的下一步应该是启用详细的错误报告,以便您可以对其进行调试。

【讨论】:

【参考方案21】:

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

【讨论】:

【参考方案22】:

尝试在调试模式下编译(在 Visual Studio 中)。如果您处于发布模式,很多 URL Rewrite 错误将不可用。

Image shows the Debug selection combobox in Visual Studio

【讨论】:

以上是关于部署网站:500 - 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

Django 部署到 AWS EB 显示 500 内部服务器错误

本地自定义了404 和500 错误处理 部署到IIS上显示 服务器内部错误

Discuz 部署,500 – 内部服务器错误。 您查找的资源存在问题,因而无法显示。

ASP.NET - 部署问题 - 通过 Web.Config 启用堆栈跟踪/跟踪侦听器日志以查找内部服务器 500 错误的原因

将 MVC 应用程序部署到服务器后,JQuery 文件 404(未找到)和 500(内部服务器错误)

HttpWebResponse远程服务器返回错误: (500) 内部服务器错误 的解决办法