ChatGPT解决这个技术问题 Extra ChatGPT

Http错误503服务不可用

一般来说,我对设置 Web 服务器很陌生。我在 Windows 8 上安装了 IIS 8,我正在尝试在本地建立一个小站点,同时进行一些开发。在 IIS 中,我选择添加站点,命名,指向我有 index.html 文件的位置(我尝试了不同的位置,最新在 ac:\inetpub\wwwroot\test -folder 中),否则使用所有默认设置.但是,当我尝试浏览到 localhost 我得到

http错误503服务不可用。

我已验证池已启动,并且已对目标文件夹授予 IIS_IUSRS 完全控制权

我四处搜索,但没有找到任何可以解决我的问题的东西,并且在 EventLog 或 C:\Windows\System32\LogFiles\HTTPERR 文件夹中没有任何帮助

谁能告诉我怎么了?

您是否检查过事件查看器以获取更多信息?
一个有用的检查列表(即使它是 IIS7)在这里 blogs.msdn.com/b/webtopics/archive/2010/02/17/… - 我怀疑你已经完成了这些检查,但可能会有所帮助
原因一:HTTP Error 503. 服务不可用如果对应的Wep应用程序的应用程序池被停止或禁用或暂停。或者由于密码过期或被锁定,应用程序池的给定用户身份可能无效。查看此完美修复:morgantechspace.com/2013/12/…
当所有日志都是空的但仍然是503时,对我来说通常的情况。原因:1.端口冲突是最常见的一种。 2. URL ACL 和解决方案描述如下。

B
Broots Waymb

可能是用户身份已过时,尤其是当您尝试启动已停止的应用程序池并且下一个请求再次失败时。

在 IIS 中,转到服务器下的应用程序池,然后为您的网站找到正确的应用程序池,然后单击它。在右侧的高级设置菜单上,选择身份并更改它并输入新用户和密码。再次单击您的应用程序池,然后选择回收以重新启动它。

您还可以尝试在事件查看器中的 Windows 日志、应用程序、详细信息选项卡下查看错误消息。


当我更改用于 W3C 工作进程的身份密码时,这正是发生在我身上的事情。谢谢
我刚刚更改了我的用户密码,第二天(重新启动后)由于密码错误而失败。当我更改密码时,我需要一份要更改的内容列表!
我去了应用程序池并意识到我的网站以某种方式被停止了。我重新启动它并噗,像新的一样工作。
我遇到过同样的问题。每当发生此类问题时,您应该首先查看事件查看器。要检查的第一个日志几乎总是:Windows 日志 -> 系统。错误消息将类似于“应用程序池 Foo 已被禁用。Windows 进程激活服务 (WAS) 在启动工作进程为应用程序池提供服务时遇到故障。”如果是身份中的错误用户名或密码,则会在前面的警告日志中提及。
我的问题是 AppPool 停止了。我刚刚重新启动并修复。
S
Simon Mourier

其他答案都很好。但就我而言,我正在使用一个 Windows 机器,它已经在运行一些旧的 IIS、IISExpress 或任何其他网站。发生的事情是在系统中以某种方式保留的 urls ACL。所以,你可能想检查一下。

这是转储所有 URL acl 的控制台命令:

netsh http show urlacl

检查此处返回的内容,如果有任何内容与您正在测试的 url 匹配,这里是删除一个 URL acl 的命令(例如):

netsh http delete urlacl url=http://localhost:2018/

(请注意仔细注意您在此处所做的操作,以防与原始问题无关)


我有一个非常繁忙的网站,在高峰时间我收到服务不可用错误。我运行了你建议的命令,我看到了这个:http://+:80/Temporary_Listen_Addresses/。这是否会导致我的网站访问者出现服务不可用问题?
@Vincent - 我不确定,但我不这么认为。这似乎是由 WCF 创建的:docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/… 你应该问另一个问题
这对我有用!我之前运行了一些自托管服务,并做了一些工作将其绑定到 localhost:443。我还必须生成一个自我证书并将其绑定到 443。不知何故有残留物(即使在我删除证书后,使用:netsh http delete sslcert ipport=127.0.0.1:443 删除 SSL 证书。我还必须运行:netsh http delete urlacl url=https://+:443/
在我的情况下,http 下一切都很好,而 https 确实有 503 这个答案让我使用了这个命令:netsh http show urlacl url=https://+443/ 为了删除链接,我使用了:netsh http delete urlacl https ://+443/
T
TylerH

就我而言,问题是 DefaultAppPool。我将“加载用户配置文件”更改为 false,现在它可以工作了。但是,我不知道这是否有副作用。

https://i.stack.imgur.com/n7e4i.png

进一步阅读设置加载用户配置文件选项:What exactly happens when I set LoadUserProfile of IIS pool?


@Pogrindis 你是什么意思,模棱两可?它加载用户配置文件,仅此而已。一些操作依赖于用户配置文件,而另一些则不依赖于用户配置文件,但这在 IIS 中几乎没有歧义——这只是系统的多用户模型引入的内容。它使您在不同用户下运行的应用程序之间更加隔离。如果您不明白为什么此设置为您“修复”了某些东西……那很可能是您的问题 - 例如,您以不正确的方式依赖于用户配置文件中的某些环境变量、注册表项或其他资源。
@Luaan 我完全同意,由此解决的问题在于我和我对 IIS(或缺乏)的理解,但是除非您精通 IIS 的工作方法,否则术语周围有很多歧义。发现为什么它解决了我的问题后,我感到很轻松。每天都是上学日。
R
Robotnik

检查您的应用程序各自的应用程序框架池 - 它可能会被停止。如果是,请启动它并再次检查。

如果您仍然遇到问题,您还可以查看事件查看器以查找该错误的原因,以便进行更多故障排除。


是的,事件查看器是您的朋友!我发现此错误发生在 2016 年 9 月 Windows 10 周年更新之后 - 它以某种方式破坏了 IIS Rewrite 2 DLL 模块。在“程序和功能”中修复它,然后重新启动应用程序池,为我修复它。
T
TylerH

如果应用程序池在某些特定用户身份下运行,则转到高级设置并再次更新用户名和密码以确保它们正确。


w
weir

如果应用程序池在您启动后立即停止并且您的事件日志显示:

应用程序池“APP_POOL_NAME”的工作进程遇到错误“无法读取配置文件”尝试从文件“\?\”读取配置数据,行号“0”。数据字段包含错误代码。

...您可能会遇到明显在 Windows 10 Fall Creators Update 和/或 .Net Framework v4.7.1 中引入的错误。它可以通过以下解决方法步骤解决,这些步骤从 this answer 到相关问题 Cannot read configuration file ' trying to read configuration data from file '\\?\<EMPTY>', line number '0'

转到安装 IIS 的驱动器,例如。 C:\inetpub\temp\appPools\ 删除与您的应用程序池同名的目录(或虚拟目录)。再次回收/启动您的应用程序池。

我已通过在 dotnet GitHub 存储库上创建以下问题向 Microsoft 报告了此错误:After installing 4.7.1, IIS AppPool stops with "Cannot read configuration file"

编辑

Microsoft 回应说这是 Fall Creators Update 的 Windows 设置过程中的一个已知问题,并记录在 KB 4050891, Web applications return HTTP Error 503 and WAS event 5189 on Windows 10 Version 1709 (Fall Creators Update) 中。该文章提供了以下解决方法过程,与上述类似。但是,请注意,无论它们是否受到问题的影响,它都会回收所有应用程序池。

使用“以管理员身份运行”选项打开 Windows PowerShell 窗口。运行以下命令: Stop-Service -Force WAS Remove-Item -Recurse -Force C:\inetpub\temp\appPools\* Start-Service W3SVC


这是最佳答案,应标记为答案。
S
Samuel Jack

首先查看系统或应用程序日志下的事件查看器。

就我而言,问题是无法为应用程序池启动任何工作进程,因为无法读取其配置文件 - 我包含了一个额外的“。”在其名称的末尾。


R
Ryan Rodemoyer

我通过删除与 IIS 中的应用程序目录匹配的 URL 保留解决了此问题。我遇到了与本文中概述的类似(绝对不一样)的问题:

A Not So Common Root Cause for 503 Service Unavailable


H
Hallmanac

或者,如果当前的解决方案都不起作用,请在您网站的目录中查找名为 app_offline.htm 的文件。这基本上告诉 IIS 您的站点不可用并改为显示此页面。

要修复它,请将其删除或重命名为 app_offline.htm.bak

就我而言,我在向同事展示如何使用它来暂时阻止网站流量时添加了它,然后忘记了我在我的盒子上做了那个。叹。


H
Hashim Akhtar

您的域可能要求用于运行 AppPool 的帐户具有批量登录权限。在这种情况下,您将看到同样的错误消息。您可以通过查看事件查看器中的系统事件来判断是否是这种情况。应该有一个事件表明与应用程序池一起使用的帐户“密码错误或没有批量登录权限”。

这就是为什么开发人员经常在他们的开发机器上使用 IIS Express,因为它绕过了批量登录权限问题。


a
atconway

我遇到了同样的问题,但这是与 IIS 中的实际站点设置有关的问题。

为您的站点/应用程序选择 Advanced Settings...,然后查看 Enabled Protocols 值。无论出于何种原因,我的网站的值都是空白的,并导致以下错误:

http错误503服务不可用。

解决方法是添加 http 并选择 OK。然后该站点再次正常运行。


+1:宾果游戏!就我而言,我开始需要 SSL,所以我的解决方法是在同一个框中添加 http, https。谢谢!
是的!显然有人将协议更改为 htt4p。不知道这是怎么发生的,但它是在我的团队无法管理的本地环境中。超级沮丧。
S
SushiGuy

检查事件查看器 - Windows - 应用程序。如果 IIS-W3SVC-WP 出现红色错误行并且消息类似于模块 DLL C:\Windows\system32\inetsrv\rewrite.dll 加载失败。数据是错误的。那么您缺少一些 Windows 安装程序功能。

在 Windows Server 2012 中,转到服务器管理器、添加角色和功能、Web 服务器 (IIS) 并添加匹配功能。通常,大部分应用程序开发部分都已安装。这是有助于诊断的 IIS features and their associated DLL 的完整列表。

在经历了几次迭代之后,我结束了上面关于“rewrite.dll”的错误消息。这导致了direct download and install of Microsoft URL Rewrite tool。最后,所有网站都栩栩如生。


同样的场景! IIS 中缺少 ReWrite 模块。正如您提到的,从 Here 安装后问题将得到解决
我安装了 URL Rewrite 2.0 模块。但是,我发现我需要在“程序和功能”(Windows 10)中修复安装。
P
Patrick.SE

我们的服务器在周日下午用完了磁盘空间,导致应用程序突然失败并返回 HTTP 错误 502。日志是空的,所以它必须是在 IIS 甚至没有做任何事情之前发生的事情。

https://i.stack.imgur.com/KP9s0.png

将系统和应用程序窗口的输出过滤到 WAS 是一个好主意,因为它可能会变得非常冗长。

该应用程序依赖于另一个被禁用的应用程序。因此请记住,如果一个应用程序的依赖进程之一出现故障,它可能会间接停机。我们只是重新启用了 .NET 应用程序池,我们的其他应用程序又开始正常运行。


C
Community

如果您安装了 IIS URL 重写,则可能与此有关。我在 Windows 10 更新后遇到了问题。

This StackOverflow post helped me.

转到 Windows Control Panel > Programs and Features > IIS URL Rewrite Module 2 > Repair


这就是答案。由于重定向模块在大更新后“损坏”,因此对站点的请求会停止启动的应用程序池。谢谢。
M
Mahmoud Valizadeh

我在安装 url 重写模块后看到此错误我尝试从以下位置安装它的以前版本:https://www.microsoft.com/en-us/download/details.aspx?id=7435 它修复了我的错误


A
Avalanchis

就我而言,问题是另一个应用程序正在使用我绑定到我的网站的端口。

我通过从命令行运行以下命令找到了它,该命令列出了所有侦听端口和所涉及的可执行文件:

netstat -b

S
Stacked

如果您有 McAfee HIPS,并且在事件查看器应用程序日志中看到以下错误:

模块 DLL C:\Windows\System32\inetsrv\HipIISEngineStub.dll 无法加载。数据是错误的。

然后这个 workaround on McAfee.com 解决了我的问题。

从页面引用:

单击开始,运行,键入资源管理器,然后单击确定。导航到:%windir%\system32\inetsrv\config 以管理员身份打开文件 applicationHost.config 以便在记事本中进行编辑。编辑 部分并删除以下行: 编辑 部分并删除以下行: 编辑完 applicationHost.config 文件后,保存文件,然后使用 iisreset 或重新启动系统重新启动 IIS 服务器。


T
Tore Aurstad

实际上,在我的情况下,https://localhost 工作正常,但 http://localhost 给出了 HTTP 503 内部服务器错误。更改 IIS 中默认网站的绑定以使用主机名 localhost 而不是空白主机名。

https://i.stack.imgur.com/abv5Q.png


R
Ryan M

就我而言,我的默认应用程序池处于脱机状态。

为了解决这个问题,我检查了位于 C:\Windows\System32\LogFile\HTTPERR 中的 IIS 日志。向下滚动到最新的错误日志,这将向您显示 IIS 的问题(如果有)。

我的错误是“503 1 AppOffline DefaultPool”

解决方案

打开 IIS 管理器

单击应用程序池,这会在您的右侧列出所有应用程序池。

检查托管您的 api 或站点的应用程序池上是否有停止标志。如果是这样,请右键单击应用程序池,然后单击开始。

再次尝试从客户端访问您的服务


A
ABDUL KHALIQ

我将端口从 80 更改为 8080,这就是发生此错误的原因。我在搜索栏中写 localhost/ 然后发生此错误。我的问题通过在搜索中写入 localhost:8080/ 然后打开本地主机来解决。


我也遇到了这个问题。因为我安装了另一个也充当 Web 服务器的应用程序,我没有注意到它使用的端口。有时我浏览了默认的 IIS 网站,并得到 503 错误。它在事件查看器和 IIS 日志中没有任何线索,卸载和重新安装 IIS 也无济于事。最后我用另一个端口在 IIS 中创建了另一个站点,它工作了,我意识到这是端口问题。
D
Daniel Persson

这发生在我们内部网的服务器上。浏览博客文章和 Windows 日志后,发现在 2015 年圣诞节前几天(与 Windows 更新有关?)我的网站应用程序池想在文件夹 c:\inetpub\temp\appPools 中创建一个配置文件,但是对该文件夹的访问受到限制。这导致应用程序池被禁用。

在此临时文件夹上向所有人添加完全控制后,我重新启动了 Windows 进程激活服务,一切都再次上线。

如果我更优雅一点,可能足以授予 AppPool 用户对文件夹的完全控制权,但我似乎永远不记得应用程序池名称和应用程序池用户如何相互关联......


P
Prabu Arumugam

如果最近使用 .NET 框架和/或 ASP.NET 进行了任何安装或更新,也可能发生这种情况。如果您不确定最近发生了什么并且您的所有应用程序都使用 ASP.NET 版本 4,您可以尝试通过在管理员模式下在命令提示符下运行以下命令来重置它们。

cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
aspnet_regiis -i

这确保安装或重新安装 ASP.NET 4 并更新现有应用程序以使用 ASP.NET 4 版本的应用程序池。它更新 IIS 元数据库中的 IIS 经典和集成模式处理程序和脚本映射。它还重新创建 ASP.NET v4.0 和 ASP.NET v4.0 经典应用程序池,并将 .NET 框架 4 设置为 DefaultAppPool 和经典 .NET 应用程序池。


1
1_bug

将 Windows 7 升级到 Windows 10 后与 IIS Express 10.0 相同。解决方案:转到 IIS 并启用所有禁用的网站并重新安装 ASP.NET Core。


T
Tony L.

还要检查地址栏并确保页面位于正确的位置。

可以返回此错误而不是 404(找不到页面)。就我而言,这是页面上没有包含子文件夹的错误链接。


S
Siemsen

我在开发机器上清理我的 IIS 时遇到了这个问题,并且我以某种方式为我无法清除的实际开发 Web 的子文件夹创建了一个虚拟文件夹,并且正在创建冲突。

为了清除它,我不得不使用

C:\Windows\System32\inetsrv\appcmd.exe list vdir

然后使用单独删除问题虚拟目录

C:\Windows\System32\inetsrv\appcmd.exe delete app /app.name:"Default Web Site"/{name of virtual directory}

R
Rohim Chou

https://i.stack.imgur.com/XbpgFm.png

对我来说,解决方案是将 Enable 32-bit Applications 更改为 False

没有一个答案对我有用。所以我想分享我在研究数小时后发现的东西。

继续从事件日志中看到此消息:The Module DLL C:\Windows\system32\RpcProxy\RpcProxy.dll failed to load. The data is the error. 原来 dll 是 64 位的,无法加载到 32 位进程中。


T
Tushar Wason

您也可以尝试以下方法。

右键单击该站点并“基本设置...”单击“连接为...”单击特定用户并提供新凭据。

现在它应该可以工作了。


D
Dharman

就我而言,由于公司政策,我不得不更改我的网络用户密码。因此,您需要编辑您的 AppPool:单击 Application Pools。选择您的池,“高级设置...”转到“流程模型”,单击“身份”,然后单击“特定用户”并提供新凭据。


u
user3225121

这可能是因为与数据库的连接数。我有这样的情况,所以写了一个解构函数并杀死了 db open connection 并解决了。


你是怎么发现你有太多的数据库连接的?您能否更具体地说明您是如何编写这个“解构器”并杀死打开的数据库连接的?您如何确定哪些连接可以安全关闭(即不再使用)?
C
Community

我有同样的问题,发现它是由在 C:\Users 中创建用户配置文件的权限问题引起的。我授予 ApplicationPoolIdentity 对 C:\Users 文件夹的完全权限,启动了站点并且一切正常,配置文件必须已正确创建,并且我的站点正常运行。然后我从 ApplicationPoolIdentity 中删除了对 C:\Users 的访问权限。

Site wont start on local using ApplicationPoolIdentity, only when using NetworkService: "HTTP Error 503. The service is unavailable."


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅