Поделиться через


начало работы с конфигурацией в IIS 7 и более поздних версий

Тобин Тит

Краткие сведения

Система конфигурации в IIS 7 и более поздних версий основана на распределенных XML-файлах с прозрачным текстом, которые содержат параметры конфигурации для всей платформы веб-сервера, включая IIS, ASP.NET и другие компоненты. При необходимости ее можно задать в каталогах содержимого вместе с веб-содержимым. Администратор компьютера может делегировать различные уровни иерархии конфигурации другим пользователям, таким как администратор сайта или разработчик приложений. Безопасные параметры по умолчанию и встроенные блокировки ограничивают доступ на запись к параметрам конфигурации только администратору компьютера; Однако сложные и детализированные функции блокировки обеспечивают безопасную разблокировку и делегирование управления определенными параметрами конфигурации для большего числа пользователей для область пространства имен веб-сайта. Система обратно совместима на уровне API с предыдущими версиями IIS и на уровне XML с предыдущими версиями платформы .NET Framework. В этом документе представлен общий обзор новой системы конфигурации.

Введение

Система конфигурации в IIS основана на распределенных XML-файлах с прозрачным текстом, которые содержат параметры конфигурации для всей платформы веб-сервера, включая IIS, ASP.NET и другие компоненты, и при необходимости могут быть заданы в каталогах содержимого вместе с веб-содержимым. Администратор компьютера может делегировать различные уровни иерархии конфигурации другим пользователям, таким как администратор сайта или разработчик приложений. Безопасные параметры по умолчанию и встроенные блокировки ограничивают доступ на запись к параметрам конфигурации только администратору компьютера; Однако сложные и детализированные функции блокировки обеспечивают безопасную разблокировку и делегирование управления определенными параметрами конфигурации для большего числа пользователей для область пространства имен веб-сайта. Система обратно совместима на уровне API с предыдущими версиями IIS и на уровне XML с предыдущими версиями платформы .NET Framework.

Новая система конфигурации предназначена для следующих компонентов:

  • Простой: все состояние находится в файлах; Проприетарное хранилище не используется; Нет базы данных конфигурации в памяти, которая является реальным master состояния конфигурации (в отличие от службы IISADMIN в IIS 6.0); Схема управляется данными и является декларативной и обнаруживаемой на 100 %.

  • Низкий уровень владения: конфигурация может быть xcopied вместе с веб-содержимым; Необязательное делегированное администрирование исключает участие администратора компьютера в каждом изменении конфигурации; Объединение параметров конфигурации и модели в iis, ASP.NET и остальной части платформы веб-сервера обеспечивает единое окно для управления сервером с помощью одного набора средств и API (например, web.config файлы могут содержать параметры IIS и ASP.NET, и есть единое место для управления такими функциями, как проверка подлинности, авторизация, пользовательские ошибки); Резервное копирование, восстановление и управление безопасностью (ACL) основаны на стандартных средствах и процессах файловой системы.

  • Безопасность. При установке служб IIS состояние конфигурации находится в одном файле, защищенном только для доступа администратора компьютера; По умолчанию делегирование не включено; По умолчанию конфиденциальная информация (например, пароли) не сохраняется; Если конфиденциальная информация должна быть записана в файлы конфигурации, она автоматически шифруется на диске; Конфигурацию для отдельных приложений можно изолировать в выделенном файле (защищенном списком управления доступом файловой системы), чтобы другие приложения не могли совместно использовать параметры и читать их.

  • Расширяемый: добавление в схему — это просто удаление XML-файла в папку schemas; Нет необходимости вызывать API или запускать средства для расширения схемы; Параметры организованы в логически связанные блоки, называемые "разделы" (точно так же, как в конфигурации .NET Framework), и добавлять новые разделы легко (не нужно писать код, в отличие от конфигурации .NET Framework); Чтение параметров пользовательских разделов из серверного модуля или приложения является простым и простым.

  • Совместимость. Существующие приложения IIS могут продолжать вызывать интерфейсы, такие как Администратор базовые объекты (ABO), поставщик IIS ADSI и поставщик WMI IIS 6.0; Существующие приложения .NET Framework могут продолжать вызывать интерфейсы, такие как System.Configuration и System.Web.Configuration; Пользователи, знакомые с xml-форматом machine.config и web.config, по-прежнему будут работать с тем же форматом и синтаксисом в этих файлах, а также смогут вручную изменять параметры IIS в том же формате и модели; Пользователи, знакомые с именами свойств метабазы IIS, найдут те же имена свойств в новых файлах конфигурации IIS 7.0 и более поздних версий.

Очистка схемы

Ниже приведен пример, демонстрирующий схему конфигурации.

Здесь показано, как организованы параметры проверки подлинности в IIS 6, а также в IIS 7.0 и более поздних версий.

Примечание

Читатели, не знакомые с концепциями IIS 6.0, могут просто игнорировать сравнение со службами IIS 6.0 и просто читать основные понятия и преимущества IIS 7.0 и более поздних версий.

Сначала мы сравним способ сохранения конфигурации в файле, а затем рассмотрим определение схемы.

В самом файле конфигурации:

//
// Snippet from IIS 6.0 Metabase.xml
//
<IIsWebService    Location ="/LM/W3SVC"
      ... many lines here ...
    AuthFlags="AuthAnonymous"
      ... many lines here ...
    >
</IIsWebService>
<IIsWebDirectory    Location ="/LM/W3SVC/1/ROOT/aspnet_webadmin/2_0_41016"
    AuthFlags="AuthAnonymous | AuthNTLM"
    >
</IIsWebDirectory>
<IIsWebVirtualDir    Location ="/LM/W3SVC/Info/Templates/Public Web Site/Root"
        AuthFlags="AuthAnonymous"
    >
</IIsWebVirtualDir>

//
// Snippet from IIS 7.0 applicationHost.config
//
<anonymousAuthentication enabled="true"  userName="…"  password="…" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<windowsAuthentication enabled="true" >
    <providers>
        <add value="Negotiate" />
        <add value="NTLM" />
    </providers>
</windowsAuthentication>

Основные выводы:

  • В IIS 6.0 используется очень длинный "плоский" список свойств. Иерархия или группирование свойств отсутствуют. Трудно найти параметры конфигурации среди сотен параметров в одном списке. В IIS 7.0 и более поздних версий используется иерархия разделов и групп разделов, а также вложенных элементов в разделах. Можно легко найти параметры проверки подлинности, выполнив поиск в группе разделов проверки подлинности или в определенном разделе проверки подлинности.
  • IIS 6.0 использует флаги для задания схем проверки подлинности. СЛУЖБЫ IIS 7.0 и более поздних версий используют раздел для каждой схемы проверки подлинности с enabled="true|false" в каждой из них. Дополнительные параметры, относящиеся только к некоторым схемам проверки подлинности, можно задать только в соответствующих разделах (например, имя пользователя и пароль можно задать только для анонимной проверки подлинности).
  • IIS 6.0 использует пути внутри файла метабазы, чтобы указать уровень конфигурации (служба, виртуальный каталог, физический каталог). Конфигурация для всего сервера находится в одном файле. СЛУЖБЫ IIS 7.0 и более поздних версий по умолчанию используют один файл, но пользователи могут использовать распределенные web.config файлы в каталогах содержимого, которые указывают параметры конфигурации для своих область.
  • IIS 6.0 использует длинные имена свойств для самостоятельного описания параметров конфигурации. Это позволяет улучшить удобочитаемость файла и помочь пользователю понять, что делает свойство . В IIS 7.0 и более поздних версий используются короткие имена, но они всегда находятся в контексте определенного раздела или даже вложенного элемента с в разделе .
  • IIS 6.0 использует multi-sz (элементы с разделителями-запятыми в одном строковом свойстве) и флаги для обработки значений нескольких элементов, например NTAuthenticationProviders. В IIS 7.0 и более поздних версий используются коллекции с простым синтаксисом add/remove/clear, точно так же, как в конфигурации .NET Framework. Это позволяет более низким уровням иерархии добавлять (или удалять) только необходимый элемент, а не дублировать все данные с указанным элементом или без него. Он также обеспечивает большую удобочитаемость файла (что приводит к меньшему числу ошибок при непосредственном редактировании).

В файле схемы:

//
// Snippet from IIS 6.0 MBSchema.xml
//
<Property InternalName="AuthFlags" ID="6000" Type="DWORD" UserType="IIS_MD_UT_FILE" Attributes="INHERIT" >
    <Flag   InternalName="AuthAnonymous"   Value="1"   ID="6218"   />
    <Flag   InternalName="AuthBasic"             Value="2"   ID="6219"  />
    <Flag   InternalName="AuthNTLM"            Value="4"   ID="6220"  />
    <Flag   InternalName="AuthMD5"              Value="16"  ID="6221"  />
    <Flag   InternalName="AuthPassport"        Value="64"  ID="6299"  />
</Property>

//
// Snippet from IIS 7.0 IIS_Schema.xml
//
<sectionSchema name="system.webServer/security/authentication/basicAuthentication">
  <attribute name="enabled" type="bool" defaultValue="false" />
  <attribute name="realm" type="string" />
  <attribute name="defaultLogonDomain" type="string" />
  <attribute name="logonMethod" type="enum" defaultValue="ClearText">
    <enum name="Interactive" value="0" />
    <enum name="Batch" value="1" />
    <enum name="Network" value="2" />
    <enum name="ClearText" value="3" />
  </attribute>
</sectionSchema>

Основные выводы:

  • IIS 6.0 использует идентификаторы (числа) для идентификации параметров. IIS 7.0 и более поздних версий использует понятные строки для имен параметров.
  • IIS 6.0 использует неинтуитивные понятия, такие как UserType, и терминологию, например InternalName. В IIS 7.0 и более поздних версий используются понятные имена, понятные пользователям, а не только приложениям.

Иерархия файлов конфигурации

Состоянием "master" для конфигурации всегда являются файлы конфигурации (в отличие от IIS 6.0, где это была база данных конфигурации в памяти, которая периодически сбрасывалась на диск).

На корневом (или глобальном) уровне есть два отдельных файла:

  • system32\inetsrv\config\applicationHost.config. Содержит глобальные значения по умолчанию для параметров веб-сервера (IIS).
  • \windows\microsoft.net\framework\v2.0.50727\config\machine.config. Содержит глобальные значения по умолчанию для параметров платформы .NET Framework, включая некоторые из ASP.NET (остальные находятся в web.config в той же папке, которую иногда называют корневой web.config).

Причина, по-прежнему существует два отдельных файла, заключается в том, что версии двух технологий отличаются (по расписанию и продукту). СЛУЖБЫ IIS являются частью Windows, и платформа .NET Framework может устанавливаться независимо в рамках выпусков Visual Studio.

В каталогах веб-содержимого могут быть необязательные файлы web.config, которые управляют поведением уровня иерархии и вниз. Они могут быть локальными или удаленными (например, если каталог содержимого находится в UNC-ресурсе). Они могут содержать IIS, ASP.NET или любые другие параметры конфигурации .NET Framework, которые можно указать на их уровне. По умолчанию файлы web.config отсутствуют.

С точки зрения иерархии наследования корневой файл machine.config, затем web.config в том же каталоге (который называется корневым web.config), затем applicationHost.config, а затем необязательный web.config файлы в пространстве имен.

Файлы включения конфигурации

В некоторых случаях полезно, чтобы файл web.config включал в себя другие .config файл. Это можно сделать с помощью атрибута configSource. В настоящее время он ограничен указанием относительных физических путей во вложенных каталогах из соображений безопасности (т. е. файл A может включать файл B, только если B находится в физическом подкаталоге A). Ниже приведен простой пример использования configSource.

<!-- in inetsrv\applicationHost.config -->
<configuration>
  <system.webServer>
  
    <!-- mimemaps moved by the customer to a different file -->
    <!-- so that this file is shorter and more readable -->
    <staticContent configSource="staticContent.config"/>
  
    <!-- the rest of system.webServer sections are here… -->
  </system.webServer>
</configuration>
  
<!-- in inetsrv\staticContent.config -->
<configuration>
  <system.webServer>
    <staticContent>
      <!-- all the mimemap definitions are here -->
      <mimeMap ….. />
      <mimeMap ….. />
      <mimeMap ….. />
    </staticContent>
  </system.webServer>
</configuration>

В этом примере клиент хотел переместить содержимое раздела staticContent в отдельный файл, чтобы иметь более короткий и удобочитаемый applicationHost.config.

Обратите внимание, что при изменении параметров конфигурации в файле .config сервер будет автоматически принимать изменения и реагировать на них. Клиент не должен беспокоиться о перезапуске приложений или пулов приложений или всего сервера (например, сервер может перезапускать пулы приложений в зависимости от того, какие параметры конфигурации были изменены).

Организация параметров

В файле конфигурации (т. е. для заданного уровня иерархии) параметры организованы структурированным образом, а не в виде плоского списка. Базовой единицей развертывания, регистрации и расширяемости является раздел конфигурации. Раздел содержится в группе разделов, которая, в свою очередь, может содержаться в родительской группе разделов. Сами секции не являются вложенными. Группы разделов имеют значение .

Ниже приведен пример из applicationHost.config.

<!-- section group for web server configuration -->
<system.webServer>
  
  <!-- section group for web server security configuration -->
  <security>
    <!-- section group for web server authentication configuration -->
    <authentication>
  
      <!-- three sections for authentication -->
  
      <basicAuthentcation ... />
      <windowsAutnentication ... />
      <anonymousAuthentication ... />
    </authentication>
  </security>
</system.webServer>

Параметры конфигурации всегда относятся к определенному разделу.

Группы разделов существуют только для лучшего структурирования; Они не имеют параметров непосредственно в них, только разделы.

В разделе структура выглядит следующим образом:

  • Элемент Configuration: содержит параметры конфигурации и, возможно, другие элементы конфигурации. Представляется в виде XML-элемента. Разделы также являются элементами.
  • Коллекция конфигураций: частный регистр элемента конфигурации, который содержит список элементов конфигурации в виде add/remove/clear (которые называются директивами коллекции). Представляется в виде XML-элемента с вложенными <элементами add>, <remove> и <clear> .
  • Свойство конфигурации: это параметр конфигурации [leaf]. Представляется в виде XML-атрибута.

Ниже приведен пример из applicationHost.config.

<!-- "windowsAuthentcation" is a section which is an element -->
<!-- "enabled" is a property -->
<windowsAuthentication enabled="true">
  
  <!-- "providers" is a collection which is an element -->
  <providers>
  
    <!-- the collection contains two elements -->
    <!-- "add" is the collection directive; "value" is the property -->
    <add value="Negotiate"/>
    <add value=""NTLM/>
  </providers>
</windowsAuthentication>

По умолчанию applicationHost.config содержит две группы разделов main: system.applicationHost и system.webServer. Он также содержит раздел под названием <configSections>, который является несколько особенным в том, что он используется внутренне системой конфигурации для регистрации всех остальных разделов.

По умолчанию machine.config содержит несколько групп разделов. Параметры ASP.NET находятся в группе разделов system.web.

Теги расположения и файлы конфигурации

Во многих случаях рекомендуется избегать web.config файлов в каталогах содержимого, но по-прежнему иметь конфигурацию по URL-адресу, которая переопределяет глобальные значения по умолчанию. Например, администратор хочет указать, что определенный сайт должен использовать определенную схему проверки подлинности, а администраторы сайта (и разработчики приложений на этом сайте) не должны иметь возможности отключить ее.

Самый простой способ добиться этого — использовать теги расположения. Это механизм для указания конфигурации для определенного пути без web.config в папке, сопоставленной с виртуальным путем.

В этом примере показано, как используется тег location в applicationHost.config:

<!-- the following will take effect on MyAdminSite -->
<location path="MyAdminSite">
  <system.webServer>
    <security>
      <authentication>
        <basicAuthentication enabled="false"/>
        <windowsAuthentication enabled="true"/>
        <anonymousAuthentication enabled="false"/>
      </authentication>
    </security>
  </system.webServer>
</location>

Теги расположения можно использовать для указания конфигурации глобального уровня (path="."), для сайта или для определенного пути внутри сайта. В файле может быть несколько тегов расположения. Теги расположения могут находиться в любом .config файле, а не только applicationHost.config или machine.config.

Теги расположения также можно использовать для блокировки и разблокировки разделов. Дополнительные сведения об этом см. в лаборатории блокировки конфигурации.

В некоторых случаях нет альтернативы для использования тегов расположения:

  • Два или более виртуальных путей, сопоставленных с одной и той же физической папкой. Очевидно, что если два виртуальных пути имеют разную конфигурацию, они не могут быть указаны в файле web.config, так как они являются общими.
  • Конфигурация для конкретного файла. Нет web.config файла для файлов; только для всей папки.

Итоги

В этом документе представлен начальный общий обзор системы конфигурации в IIS 7.0 и более поздних версий. Выделен формат более чистой схемы; распределенный характер системы конфигурации и то, как она обеспечивает делегирование параметров конфигурации владельцу сайта или разработчику приложения; структурированная организация параметров в файлах конфигурации; и интеграция между IIS и системами конфигурации ASP.NET.

Для получения дополнительных сведений рекомендуется ознакомиться с остальными документами по конфигурации и, в частности, документом о встроенных функциях конфигурации, в котором рассматриваются более низкоуровневые сведения о системе, включая ее структуру и архитектуру.