HTTP错误503,服务不可用。

475

我对于搭建Web服务器非常陌生。我在Windows 8上安装了IIS 8,并试图在本地设置一个小网站,同时进行开发。在IIS中,我选择添加网站,输入名称,指向有一个index.html文件的位置(我尝试了不同的位置,最新的是在文件夹中),其他方面使用所有默认设置。但是,当我尝试浏览localhost时,出现了

HTTP错误503. 服务不可用。

我已验证应用程序池已启动,并且我已经给目标文件夹授予了IIS_IUSRS完全控制权限。

我已经搜索了一些信息,但没有找到解决问题的方法,在事件日志或文件夹中没有任何有用的信息。

请问有谁知道问题出在哪里吗?


6
你查看了事件查看器以获取更多信息吗? - Webplanet TFS Consulting
3
这里有一个有用的清单(虽然是针对IIS7的),链接在这里:http://blogs.msdn.com/b/webtopics/archive/2010/02/17/a-not-so-common-root-cause-for-503-service-unavailable.aspx。我猜想你已经进行了这些检查,但这个清单可能会有所帮助。 - Webplanet TFS Consulting
171
原因1:如果相应的Web应用程序的应用程序池已停止、禁用或暂停,则会出现HTTP错误503。或者,由于密码过期或锁定,应用程序池的给定用户标识可能无效。请参见此完美修复方法:http://www.morgantechspace.com/2013/12/HTTP-Error-503-The-service-is-unavailable.html - Kevin M
2
通常情况下,当所有日志都为空但仍然返回503时,原因可能是:
  1. 端口冲突是最常见的原因。
  2. URL ACL问题及其解决方案如下所述。
- Puterdo Borato
40个回答

527

如果您尝试启动已停止的应用程序池,但下一个请求仍然失败,可能是用户身份验证过期的原因。

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

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


27
当我更改了用于W3C工作进程的身份验证密码时,发生了与我完全相同的情况。谢谢。 - Toan Nguyen
9
我刚刚更改了我的用户密码,第二天(重启后)登录失败了,因为密码不正确。我需要一份在更改密码时要更改的事项清单! - Brian J
4
我去了应用程序池,发现我的网站不知何故被停止了。我重新启动它,然后一切都好像崭新的一样运行良好。 - Jason L.
2
我遇到了同样的问题。每当出现这样的问题时,事件查看器是您应该首先查看的地方。几乎总是要检查的第一个日志是:Windows日志->系统。错误消息将类似于“应用程序池Foo已被禁用。启动工作进程以为应用程序池提供服务时,Windows过程激活服务(WAS)遇到了故障。” 如果是身份验证中的用户名或密码不正确,则将在前面的警告日志中提到。 - Jeremy Ray Brown
我遇到的问题是AppPool停止了。我只是重新启动了它,问题得以解决。 - shaair
显示剩余3条评论

112

其他答案也不错。但就我而言,我在一台已经运行了一些旧版IIS、IISExpress或其他网站的Windows计算机上工作。所发生的情况是URL的ACL在系统中被保留了。因此,您可能需要检查这个问题。

以下是用于转储所有URL ACL的控制台命令:

netsh http show urlacl

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

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

(请注意,在这里进行的操作是否与原始问题无关,务必仔细记录)


我的网站非常繁忙,在高峰期我会遇到服务不可用的错误。我运行了你建议的命令,看到了这个:http://+:80/Temporary_Listen_Addresses/。这是否会导致我的网站访问者无法使用服务? - Vincent
@Vincent - 我不确定,但我认为这似乎是由WCF创建的:https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-replace-the-wcf-url-reservation-with-a-restricted-reservation 你应该提出另一个问题。 - Simon Mourier
3
这对我有用!之前我运行了一些自助托管服务,并进行了一些工作,将其绑定到 localhost:443。我还需要生成一个自签名证书并将其绑定到 443 端口。但不知何故,即使我删除了证书,并使用 netsh http delete sslcert ipport=127.0.0.1:443 删除了 SSL 证书,仍然存在残留物。我还要运行:netsh http delete urlacl url=https://+:443/ - Ninja
在我的情况下,http 一切正常,而 https 出现了 503 错误。这个答案引导我使用以下命令:netsh http show urlacl url=https://+443/。为了删除链接,我使用了以下命令:netsh http delete urlacl https://+443/。 - Kjeld Poulsen
1
这对我解决了问题。Windows管理中心占用了443端口。 - Brady Clifford

100
在我的情况下,问题出在DefaultAppPool上。我将“Load User Profile”更改为false,现在它可以正常工作了。但是,我不知道这是否会有副作用。
关于设置“Load User Profile”选项的更多阅读:当我设置IIS池的LoadUserProfile时会发生什么?

@Pogrindis 你说的含糊不清是什么意思?它只是加载用户配置文件,没有更多的操作。有些操作依赖于用户配置文件,而其他操作则不依赖,但这在IIS中并不算是含糊不清 - 这只是系统多用户模型引入的一种方式。它为在不同用户下运行的应用程序之间提供了更多的隔离。如果你不明白为什么这个设置对你来说“修复”了一些问题...那很可能是你的问题 - 例如,你以不正确的方式依赖于某些环境变量、注册表键或其他资源在用户配置文件中。 - Luaan
3
@Luaan 我完全同意,这个问题的解决取决于我对IIS的理解(或者说缺乏理解),但是除非你精通IIS的工作方法,否则术语上存在相当多的歧义。发现为什么它解决了我的问题是一种解脱。每天都是学校日。 - Pogrindis

58

检查您的应用程序的相关应用程序框架池 - 它可能已经停止。如果是这样,请启动它并再次检查。

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


1
是的,事件查看器是你的好朋友!我发现这个错误发生在2016年9月的Windows 10周年更新之后 - 它不知何故破坏了IIS Rewrite 2 DLL模块。在“程序和功能”中修复它,然后重新启动应用程序池,对我来说解决了这个问题。 - James McCormack

29

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


20
如果您启动应用程序池后立即停止,并且事件日志显示以下内容:
“应用程序池'APP_POOL_NAME'的工作进程遇到了错误“ Cannot read configuration file”,尝试从文件'\\?\ '读取配置数据,行号为' 0'。数据字段包含错误代码。”
... 您可能会遇到一个错误,该错误似乎是在Windows 10秋季创作者更新和/或.Net Framework v4.7.1中引入的。可以通过以下绕过步骤解决,这些步骤来自相关问题“Cannot read configuration file' trying to read configuration data from file '\\?<EMPTY>',line number'0'的答案

  1. 转到安装IIS的驱动器,例如C:\ inetpub \ temp \ appPools \
  2. 删除与您的应用程序池同名的目录(或虚拟目录)。
  3. 再次回收/启动您的应用程序池。
我已通过在dotnet GitHub repo上创建以下问题
“安装4.7.1之后,IIS AppPool停止并显示“无法读取配置文件”报告了此错误。 编辑

微软回应称,这是Windows 10秋季创意者更新的设置过程中已知的问题,在KB 4050891, Web applications return HTTP Error 503 and WAS event 5189 on Windows 10 Version 1709 (Fall Creators Update)中有文档记录。该文章提供了以下解决程序,与上述程序类似。但请注意,它将回收所有应用程序池,而不管它们是否受到影响。

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

这是最佳答案,应该标记为答案。 - Eriawan Kusumawardhono

13
如果当前的解决方案均不可行,则需在您网站的目录中查找一个名为 app_offline.htm 的文件。这基本上告诉 IIS 您的网站不可用,并显示此页面。
要解决此问题,请将其删除或将其重命名为 app_offline.htm.bak
在我的情况下,我在向同事展示如何使用此功能暂时阻止访问网站时添加了它,然后忘记了在我的计算机上进行此操作。唉。

13

首先在事件查看器中查找,可以在系统或应用程序日志下查看。

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


13

9
可能您的域需要运行AppPool的帐户具有批处理登录权限。如果是这种情况,您将会看到相同的错误消息。您可以通过查看事件查看器中的系统事件来确定是否存在这种情况。应该会有一条事件说正在使用与App Pool相关联的帐户具有“错误的密码或没有批处理登录权限”。
这就是为什么开发人员经常在他们的开发机器上使用IIS Express,因为它可以避开批处理登录权限的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接