Назад | Перейти на главную страницу

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. Откройте диспетчер IIS
  2. Щелкните имя сервера в дереве слева
  3. Правая панель, раздел Управление, дважды щелкните Редактор конфигурации
  4. Вверху выберите раздел system.webServer/security/authentication/anonymousAuthentication
  5. На правой панели нажмите Разблокировать раздел.
  6. Вверху выберите раздел system.webServer/security/authentication/windowsAuthentication
  7. На правой панели нажмите Разблокировать раздел.

Это решило мою ошибку в Windows Server 2012, IIS 8.5. Должен работать и для других версий.

  1. Перейти к Диспетчер сервера, нажмите добавить Роли и особенности
  2. В разделе ролей выберите: Веб сервер
  3. Под Безопасность в подразделе выберите все (я исключил дайджест, ограничения IP и авторизацию URL, так как мы их не используем)
  4. Под Разработка приложения выберите .NET Extensibility 4.5 и ASP>NET 4.5, обе записи ISAPI
  5. в Характеристики раздел выбрать: NET 3.5, .NET 4.5, ASP.NET 4.5
  6. в веб сервер раздел выбрать: Web Server (all), Management Tools (IIS Management Console and Management Service), Windows

Блокировка конфигурации может произойти:

  1. Applicationhost.config (строка конфигурации: MACHINE / WEBROOT / APPHOST)

  2. файл Site Web.config (MACHINE / WEBROOT / APPHOST / Имя веб-сайта)

  3. Любой файл приложения web.config, который (MACHINE / WEBROOT / APPHOST / Site Name / App Name)

Блокировка раздела (раздел: раздел конфигурации IIS, например <asp>) позволяет запретить возможность настройки этих параметров любому, кто находится на более низком уровне иерархии, чем вы.

Использование функции делегирования функций в графическом пользовательском интерфейсе не является неправильным и делает очень похожую вещь на то, что делает AppCMD, под обложками - устанавливает OverrideMode для данного раздела в <location> на любом уровне конфигурации, на котором вы сосредоточены.

APPCMD можно использовать для разблокировки файлов, но обратите внимание на то, где он говорит, что это делает - это не так умно, как графический интерфейс.

Добавление -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 (или обновил его) в этом месте.

Если вы используете IISExpress и Visual Studio 2015, applicationHost.config хранится в $(solutionDir).vs\config\applicationhost.config (спасибо Nime Cloud's ответ).

Просто измени overrideModeDefault="Allow" везде, где это возможно.

<sectionGroup name="security">
    <section name="access" overrideModeDefault="Deny" />
    <section name="applicationDependencies" overrideModeDefault="Deny" />
    <sectionGroup name="authentication">
        <section name="anonymousAuthentication" overrideModeDefault="Allow" />
etc...

Попробуйте в своем пуле приложений, отключите поддержку 32-разрядных приложений IIS Manager -> Пулы приложений -> выберите [Your App Pool] -> Advanced Settings -> Enable 32-Bit Applications - измените его на «False»

Взгляни на IIS - этот раздел конфигурации нельзя использовать по этому пути (блокировка конфигурации?)

Принятый ответ отлично сработал для меня в Windows 10, он предписывает сделать следующее:

  • Нажмите кнопку "Пуск".
  • в поле поиска введите "Включение или отключение функций Windows"
  • в окне функций нажмите: «Информационные службы Интернета»
  • Щелкните: «Службы Интернета»
  • Щелкните: «Функции разработки приложений»
  • Отметьте (включите) функции. Проверял все, кроме CGI.