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

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

服务器错误

500内部服务器错误。

您正在查找的资源存在问题,无法显示。

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

页面无法显示,因为发生了内部服务器错误。

我怎样才能看到这个服务器错误背后的实际问题?

首先, 您需要启用并查看您的networking消息的详细错误 ,因为这是一个普遍的信息,而不提供有关安全原因实际发生的信息。

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

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

在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 。 您只需要closures一段时间的自定义错误,并获得详细的错误页面。

参考:在Go Daddy的帮助文章中启用Windows自定义错误消息

此外,这可以帮助: 如何启用详细的错误消息 (从IIS)。

我在这个问题上拉着我的头发。 确保以下条目在根web.config文件中为我修复:

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

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

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

不知何故,在文件web.config提到的DLL文件的版本和版本有差异。

我尝试了各种论坛中提到的所有选项。 没有什么帮助,虽然每个人都提出了同样的修复,但不知何故,在我的情况下没有工作。 最后我的头撞了两天。 我决定删除所有DLL文件引用,并从项目中删除web.cofig(制作一个本地副本),让应用程序抛出错误,然后逐个添加DLL文件,复制到local = true。

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

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

它的工作,最终我的问题解决了。

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

问题是:我在Visual Studio中将该网站设置为.NET 3.5(右键单击网站项目 – >属性页 – >生成),但将Azure中的网站configuration为.NET 4.0。 哎呀! 我在Azure中将其更改为3.5,并且工作正常。

对我来说,web.config中的以下代码是罪魁祸首。 当我删除它,网站工作正常。

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

在我的情况下,我把一个错误在我的web.config文件。 应用程序密钥以某种方式置于<appSettings>标记下。 但我不知道为什么它不显示configuration错误。 错误500对于调查问题来说过于通用。

除了其他build议之外,请确保将httpErrors节点的existingResponse属性更改为Auto ,或者完全删除该属性。

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

可能你的web.config文件是错误的或缺less一些标签。 我使用.NET 4的正确configuration标签解决了我的问题。

 <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> 

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

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

希望它可以帮助别人。

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

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

从IIS解决500内部服务器。

500内部错误
Windows主机错误

Godaddy托pipe问题

我一直面临同样的问题,但现在我的问题已经解决了。 总是使用在这个托pipe这个工作。

我也会推荐你做所有你想在你的web.config文件中做出的改变。 请逐一进行testing,并在实时域名上进行testing,以便您可以find确切的问题或您的托pipe服务提供商不允许您使用的function。

 <?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> 

确保您的帐户使用IIS 7.有关详细信息,请参阅在Windows主机帐户上自定义IIS设置。 按照Windows IIS 7主机帐户上的更改pipe道模式中的说明进行操作。 select集成pipe道模式。 在您的“项目参考”部分中,为以下组件设置“复制本地”为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. 

服务器错误500 – 内部服务器错误。 您正在查找的资源存在问题,无法显示。 Goddady。 主机 – networking – 经济 – Windows Plesk

在我的情况下,我replace这个代码:

 <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> 

它解决了我的问题。

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

例如,您可以在安装了Office的本地计算机上成功运行C#Excel Web应用程序,同时在服务器部署中获得500错误,因为服务器上没有安装Office套件,从而导致服务器错误。

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

另外请注意,现在(1月16日),GoDaddy与ASP.Net 3.5和4.5.2一起工作。 要在Visual Studio中使用4.5.2,必须是2012或更新版本,如果不是2015,则必须下载并安装.NET Framework 4.5.2开发包。

如果还没有工作,那么是的,你的下一步应该是启用详细的错误报告,所以你可以debugging它。

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

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

您不需要修改web.config或将任何细节公开给任何其他人。

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

在本地debugging期间,您可以让您的处理程序抛出实际的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; } 

还要确保检查Exception的InnerException

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

右键单击相应的应用程序池,单击“高级设置”,然后向下滚动到ID – 它可能会被设置为ApplicationPoolIdentity 。 点击button(..),然后从下拉列表中selectNetworkService

另外请确保,如果它是一个.NET 2.0应用程序,而不是在App Pool中引用4.0框架。

对于IIS 8

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

closures由Raul IIS8自定义错误