部署网站: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)。
【讨论】:
感谢您的帖子!为我做的部分是: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>
它解决了我的问题。
【讨论】:
我在阅读了其他提示后添加了<compilation debug="true"
,但添加到 <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 中的如果您使用的是自定义 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 月),GoDaddy
与 ASP.Net 3.5
和 4.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 错误的原因