IIS 抱怨某个部分被锁定 - 我怎样才能找出它被锁定的位置?

IIS 抱怨某个部分被锁定 - 我怎样才能找出它被锁定的位置?

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

制定了以下步骤来修复我的问题:

  1. 打开 IIS 管理器
  2. 单击左侧树中的服务器名称
  3. 右侧窗格,管理部分,双击配置编辑器
  4. 在顶部,选择部分system.webServer/security/authentication/anonymousAuthentication
  5. 右侧窗格中,单击“解锁部分”
  6. 在顶部,选择部分system.webServer/security/authentication/windowsAuthentication
  7. 右侧窗格中,单击“解锁部分”

答案2

这解决了我在 Windows Server 2012、IIS 8.5 上的错误。也适用于其他版本。

  1. 服务器管理器,点击添加角色和功能
  2. 在角色部分选择:网络服务器
  3. 在下面安全子部分选择所有内容(我排除了摘要、IP 限制和 URL 授权,因为我们不使用它们)
  4. 在下面应用程序开发选择.NET Extensibility 4.5ASP>NET 4.5,两个 ISAPI 条目
  5. 在里面特征选择部分:NET 3.5,,.NET 4.5ASP.NET 4.5
  6. 在里面网络服务器选择部分:Web Server (all),,Management Tools (IIS Management Console and Management Service)Windows

答案3

配置锁定可能发生在:

  1. Applicationhost.config(配置字符串:MACHINE/WEBROOT/APPHOST)

  2. 站点 Web.config 文件 (MACHINE/WEBROOT/APPHOST/网站名称)

  3. 任何应用程序 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”

相关内容