记录一次解决 IIS 网站 HTTP 500.30 解决思路和方法

技术背景:

名称 内容
语言 C# .NET 8
框架 WebApi

昨天一如往常的上线一个后台Api网站,编译=》发布=》打包=》新建网站到IIS=》开启网站=》访问
一切的一切都像某个巧克力一样丝滑。直到访问网站,直接500.03

HTTP Error 500.30 - ASP.NET Core app failed to start
Common solutions to this issue:
The app failed to start
The app started but then stopped
The app started but threw an exception during startup
Troubleshooting steps:
Check the system event log for error messages
Enable logging the application process' stdout messages
Attach a debugger to the application process and inspect
For more guidance on diagnosing and handling these errors, visit Troubleshoot ASP.NET Core on Azure App Service and IIS.

检查网站logs下的日志,发现没有被记录
以为是 appsettings.json 文件有问题
检查了 数据库链接字符串
检查了json文件中的括号,逗号等 符号错误
更改过后依旧报错。

以下是解决思路

1、打开 “事件查看器” =》“Windows日志” =》“应用程序”

在这里插入图片描述

2、检查事件记录中的报错信息,从下到上看

来源为.NET 运行时的记录的错误为,因为无法访问某个log文件,所以程序自动退出了
在这里插入图片描述
后两个记录的是CLR worker 报错
在这里插入图片描述
根据以上线索,可以联想出 500.30是网站启动时初始化失败的报错,但是IIS中的网站依旧启动了。
根据第一张的报错信息,可以看出是日志文件没有权限访问导致的问题
找到目标文件,右键==“属性”== =》“安全(选项卡)” 观察到此时多出了一个网站 和应用程序池命名并不一致的用户组
在这里插入图片描述
查询得知,Winserver中 在IIS7.5之后,网站启动时,会初始化整个项目,并创建一个和应用程序池一样名称的 虚拟用户 启动w3wp.exe到计算机任务中,用来做文件的访问用户。
至此,答案水落石出。
因为创建网站时,随手创建的名称,导致了更改正式名称之后网站的应用程序池与文件用户不一致,没有权限访问日志文件,导致的无法正确启动网站

解决方案

1、找到IIS中网站的 “身份验证”

在这里插入图片描述

2、编辑 “匿名身份验证”,将特定用户切换至"应用程序池标识"

在这里插入图片描述

3、设置网站根目录权限,新建安全用户,给到完全控制的权限

请注意:IIS AppPool 的大小写和空格
在这里插入图片描述

4、重启网站,即可正常访问

本文参考文章

链接: Microsoft:Application Pool Identities

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐