我的 web.config 中有此部分:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<security>
<authentication>
<anonymousAuthentication enabled="true" />
<windowsAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
IIS7 崩溃并且抱怨身份验证部分:
模块 AnonymousAuthenticationModule
通知 AuthenticateRequest
处理程序 StaticFile
错误代码 0x80070021
配置错误 此配置部分无法在此路径中使用。当部分在父级锁定时会发生这种情况。锁定是默认的(overrideModeDefault="Deny"),或者通过带有 overrideMode="Deny" 或旧版 allowOverride="false" 的位置标记明确设置。
Config Source
69: <authentication>
70: <anonymousAuthentication enabled="true" />
因此,解决这个问题的通常方法是进入%windir%\system32\inetsrv\config\applicationHost.config
并解锁该部分:
<sectionGroup name="system.webServer">
<sectionGroup name="security">
<section name="access" overrideModeDefault="Deny" />
<section name="applicationDependencies" overrideModeDefault="Deny" />
<sectionGroup name="authentication">
<section name="anonymousAuthentication" overrideModeDefault="Allow" />
<section name="basicAuthentication" overrideModeDefault="Allow" />
<section name="clientCertificateMappingAuthentication" overrideModeDefault="Allow" />
<section name="digestAuthentication" overrideModeDefault="Allow" />
<section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Allow" />
<section name="windowsAuthentication" overrideModeDefault="Allow" />
</sectionGroup>
(或者,appcmd unlock config
)。
奇怪的是:我已经这样做了但它仍然抱怨。
我寻找位置(MVC 是我的网站的名称,也是我使用的所有网站的根目录):
<location path="MVC" overrideMode="Allow">
<system.webServer overrideMode="Allow">
<security overrideMode="Allow">
<authentication overrideMode="Allow">
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="true" />
</authentication>
</security>
</system.webServer>
</location>
它仍然会爆炸。我很困惑为什么会发生这种情况。我无法从 web.config 中删除它,我想找到根本问题。
有没有办法从 IIS 中获取具体信息,哪条规则最终拒绝了我?
编辑:我能够使用 IIS7 管理控制台修复此问题,方法是转到最根目录(我的机器)并单击“编辑配置”并解锁那里的部分。但我仍然想知道是否有更好的方法,因为我找不到它实际修改的文件。
答案1
制定了以下步骤来修复我的问题:
- 打开 IIS 管理器
- 单击左侧树中的服务器名称
- 右侧窗格,管理部分,双击配置编辑器
- 在顶部,选择部分
system.webServer/security/authentication/anonymousAuthentication
- 右侧窗格中,单击“解锁部分”
- 在顶部,选择部分
system.webServer/security/authentication/windowsAuthentication
- 右侧窗格中,单击“解锁部分”
答案2
这解决了我在 Windows Server 2012、IIS 8.5 上的错误。也适用于其他版本。
- 去服务器管理器,点击添加角色和功能
- 在角色部分选择:网络服务器
- 在下面安全子部分选择所有内容(我排除了摘要、IP 限制和 URL 授权,因为我们不使用它们)
- 在下面应用程序开发选择
.NET Extensibility 4.5
和ASP>NET 4.5
,两个 ISAPI 条目 - 在里面特征选择部分:
NET 3.5
,,.NET 4.5
ASP.NET 4.5
- 在里面网络服务器选择部分:
Web Server (all)
,,Management Tools (IIS Management Console and Management Service)
Windows
答案3
配置锁定可能发生在:
Applicationhost.config(配置字符串:MACHINE/WEBROOT/APPHOST)
站点 Web.config 文件 (MACHINE/WEBROOT/APPHOST/网站名称)
任何应用程序 web.config 文件(MACHINE/WEBROOT/APPHOST/站点名称/应用程序名称)
锁定某个部分(部分:IIS 配置部分,例如<asp>
)可以让你拒绝层次结构中比你低级别的任何人配置这些设置的能力。
使用 GUI 的功能委派并没有错,并且它在幕后所做的非常类似于 AppCMD 所做的 - 在<location>
您关注的任何配置级别为标签中的给定部分设置 OverrideMode。
APPCMD 可用于解锁文件,但请注意它执行此操作的位置 - 在这方面它不如 GUI 那么智能。
-commit:apphost
在命令末尾添加APPCMD UNLOCK
目标 Applicationhost.config,即这IIS 操作的关键文件(取代了早期版本的元数据库;存储了所有的集中设置但允许在 web.config 文件中覆盖(如果您这样做))。
如果没有 -commit:apphost,APPCMD 将定位 web.config 文件的最近逻辑点 - 无论是在站点还是应用程序级别,并使用类似上述设置的配置字符串指示它已更改设置。(另外:您仍然可以仅定位子网站中的设置,但提交到 apphost - 它使用位置标签来实现这一点)
所以如果它说(记忆解释)“更改已提交给 MACHINE/WEBROOT/APPHOST”,那就意味着 IIS 层次结构的顶层。
如果它说“致力于 MACHINE/WEBROOT/APPHOST/Dodgy Web Site”,那就意味着它查找了 Dodgy Web Site 背后的物理路径,并在该位置写入了一个 web.config 文件(或更新了它)。
答案4
尝试在您的应用程序池中禁用 32 位应用程序支持 IIS 管理器 -> 应用程序池 -> 选择 [您的应用程序池] -> 高级设置 -> 启用 32 位应用程序 - 将其更改为“False”