Windows Server 2008 — новая серверная операционная система
Часть 6. Internet Information Services 7
Internet Information Services 7.0 для ИТ-специалистов
Internet Information Services 7.0 для web-хостеров
Internet Information Services 7.0 для разработчиков
Основные новинки в Internet Information Services 7.0
Модульная архитектура и расширяемость
Средства управления и администрирования
Диагностика и обнаружение ошибок
Мы продолжаем наше знакомство с новой серверной операционной системой компании Microsoft — Windows Server 2008. Предыдущие части данного обзора были посвящены следующим темам:
- основные понятия, связанные с серверной операционной системой, роли, которые может выполнять Windows Server 2008, а также система управления сервером — Server Manager (см. КомпьютерПресс № 4’2007);
- вариант установки Windows Server 2008 с минимальным набором функциональности — Server Core, транзакционная файловая система (TxF) и транзакционный реестр (см. КомпьютерПресс № 5’2007);
- расширения, появившиеся на уровне ядра операционной системы, процессы и потоки, изменения в сетевом стеке, а также вопросы, связанные с порядком загрузки операционной системы (см. КомпьютерПресс № 6’2007);
- технологии, связанные с управлением инфраструктурой и приложениями, выполняемыми на ее основе, — Windows Eventing 6.0, Windows Installer 4.0, Windows PowerShell, Microsoft Management Console 3.0 и Windows Task Scheduler 2.0 (см. КомпьютерПресс № 8’2007);
- Windows Server 2008 в роли сервера приложений (см. КомпьютерПресс № 9’2007).
В этой части мы продолжим рассмотрение Windows Server 2008 в роли сервера приложений и обратим внимание на компонент, известный под названием Internet Information Services 7.0 (IIS 7). Данный компонент — это больше, чем просто web-сервер. IIS 7 — это защищенная, простая в управлении платформа для разработки и хостинга web-приложений и сервисов. Internet Information Services 7.0 (IIS 7) содержит большое число новинок и расширений, которые могут быть интересны как для ИТ-специалистов, так и для компаний, занимающихся хостингом, и для разработчиков.
Internet Information Services 7.0 для ИТ-специалистов
Для ИТ-специалистов Internet Information Services 7.0 представляет собой надежный, защищенный и легко управляемый web-сервер. Благодаря настраиваемой процедуре установки IIS 7, администраторы могут существенно уменьшить область атак (attack surface), минимизировать число обновлений и снизить объем ресурсов, требуемых для развертывания web-инфраструктуры. Web-сайты, работающие под управлением IIS 7, а также выполняемые на сервере приложения, более защищены от внешних воздействий за счет автоматической изоляции, конфигурации и генерации уникальных идентификаторов процессов.
Управление сервером IIS 7 стало гораздо проще — администраторам стала доступна утилита, позволяющая выполнять основные настройки в виде серии упрощенных диалоговых панелей. Эта утилита, а также новая утилита командной строки, предназначенная для администрирования, WMI-провайдер и набор программных интерфейсов для управляемого кода (.NET API) делают администрирование web-сайтов и приложений более эффективным. В IIS 7 также реализовано более простое управление web-фермами — конфигурация web-сервера, код приложения и его содержимое могут храниться на централизованном файл-сервере и совместно применяться несколькими web-серверами.
Администраторы также могут делегировать административные полномочия владельцам сайтов, которые могут конфигурировать web-сервер через файл web.config или посредством утилиты Remote IIS Manager и удаленного соединения через HTTP/SSL при работе под управлением Windows Vista, Windows XP, Windows Server 2003 и Windows Server 2008.
Internet Information Services 7.0 для web-хостеров
Для web-хостеров Internet Information Services 7.0 — это эффективный по затратам, масштабируемый web-сервер, позволяющий создавать решения для хостинга, предназначенные для большого числа потребителей. Снижение затрат на хостинг с использованием IIS 7 достигается за счет применения новой, масштабируемой архитектуры, которая поддерживает хостинг тысяч web-сайтов на одном сервере. IIS 7 позволяет web-хостерам обслуживать большее число пользователей за счет использования нового модуля — FastCGI, который обеспечивает быструю и надежную обработку для PHP и других web-технологий. Входящий в состав IIS 7 FTP-сервер обеспечивает хостеров полностью интегрированным web/FTP-сервером, который поддерживает все современные механизмы публикации, включая FTP/SSL и аутентификацию на базе членства (membership-based authentication).
Internet Information Services 7.0 для разработчиков
И наконец, для разработчиков Internet Information Services 7.0 представляет собой гибкий расширяемый web-сервер, который может использоваться для разработки и развертывания web-приложений на Windows Vista и Windows Server 2008. В IIS 7 поддерживается полноценная модульная архитектура, состоящая более чем из 40 модулей, каждый из которых базируется на программном интерфейсе, обеспечивающем расширяемость функциональности. Разработчики могут создавать новые модули или замещать существующие с помощью как традиционных языков программирования, так и .NET-языков.
Помимо этого разработчики имеют возможность расширения конфигурации IIS 7 и создания утилит для управления сервером, которые могут быть встроены в новую административную утилиту — IIS Manager. Разработчики могут создавать приложения, применяя различные программные интерфейсы — IIS 7 поддерживает «классическую» технологию Active Server Pages (ASP) и ASP .NET с возможностью расширения функциональности сервера через библиотеку классов .NET Framework, обеспечивает такие сервисы ASP .NET, как аутентификация на базе форм и кэширование выходной информации, которые доступны для всех типов приложений.
Кроме того, IIS 7 поддерживает большинство современных технологий создания web-приложений, в том числе PHP, PERL, ColdFusion, Ruby и ряд других. Поддержка системы распределенной конфигурации позволяет хранить настройки в файлах Web.config — таким образом, приложения могут быть предварительно сконфигурированы и развернуты на IIS 7 командой xcopy. Такой подход позволяет разработчикам гораздо быстрее обнаруживать ошибки, снижать время на разработку и развертывание, минимизировать время простоя сайтов.
После того как мы узнали о том, какая новая функциональность в Internet Information Services 7.0 может представлять интерес как для ИТ-специалистов, так и для компаний, занимающихся хостингом, и для разработчиков, рассмотрим основные новинки в IIS 7 более подробно.
Основные новинки в Internet Information Services 7.0
В настоящее время одним из самых популярных, надежных и масштабируемых web-серверов является IIS 6. За примерами далеко ходить не надо: построенный на Internet Information Services 6.0 сайт MySpace обслуживает 23 млрд обращений в месяц, сайт Microsoft.com (до недавнего времени работавший под управлением IIS 6) обслуживает 10 тыс. обращений в секунду и 300 тыс. одновременных соединений, а сайт Match.com (работающий на IIS 6) — 30 млн обращений в день.
С момента выпуска IIS 6 не было обнаружено ни одной критической уязвимости, а по данным port80software.com, более чем 54% компаний, входящих в список Fortune 1000, используют IIS 6 для обеспечения каждодневных бизнес-операций.
Новая версия web-сервера, Internet Information Services 7.0, продолжает развитие web-платформы Microsoft и включает ряд расширений и дополнений, которые делают ее еще более надежной, управляемой, расширяемой и способной к решению новых задач, возникающих перед разработчиками и администраторами (рис. 1).
Рис. 1. Основные новинки в Internet Information Services 7.0
Модульная архитектура и расширяемость
Новая архитектура web-сервера основана на компонентном подходе, позволяющем обеспечить гибкость и расширяемость. Это означает, что функциональность IIS 7 реализована в виде набора модулей, которые в зависимости от тех или иных задач могут быть не только добавлены или удалены, но и полностью заменены на модули, созданные разработчиками. Потребители сервисов могут существенно сократить затраты на обеспечение безопасности, развертывание, установку обновлений, имея при этом всю функциональность web-приложений, требуемую для решения их задач.
Модульную архитектуру, реализованную в IIS 7, можно условно разделить на две группы: модульный канал обработки запросов (pipeline) и модульный интерфейс администрирования. Модульный канал обработки запросов предоставляет набор более чем из 40 модулей, обеспечивающих функциональность сервера. При необходимости модули могут быть удалены или заменены на самостоятельно разработанные, что может потребоваться в тех случаях, когда мы хотим уменьшить область возможных внешних атак, снизить ресурсы, используемые для поддержания функционирования сервера, или увеличить производительность. Как мы уже отмечали, самостоятельно разрабатываемые модули могут быть написаны как на традиционных языках, так и на «управляемом» коде. В последнем случае разработчики могут использовать технологии .NET для всего процесса разработки, интегрироваться с инфраструктурой и легко включать в состав решений на базе IIS поддержку новых технологий.
Чтобы понять преимущества модульной архитектуры, вспомним, как происходит обработка запроса в IIS 6. Данный web-сервер является монолитным с точки зрения дизайна — вся его функциональность реализована в виде одной динамически загружаемой библиотеки — w3core.dll. Такой подход затруднял настройку и отладку. Например, если вам не требовалась поддержка Digest Authentication, вы могли отключить эту опцию, но код, обеспечивающий данную функциональность, все равно загружался в память. Технология ASP .NET активизировалась при обращении к ресурсам с соответствующими расширениями имен файлов и загружалась в рабочий процесс сервера (W3WP) по требованию, через соответствующий обработчик запросов — ISAPI Handler. Это происходило на этапе обработки запросов, когда совершилось уже несколько ключевых для обработки событий, включая, например, аутентификацию. Добавление функциональности было возможно только через создание ISAPI-фильтров, обрабатывающих соответствующие входящие и исходящие запросы. Создание таких фильтров требовало определенных усилий — можно было использовать только язык С++ (рис. 2).
Рис. 2. Обработка запросов в IIS 6
В IIS 7 монолитная функциональность IIS 6 была разделена более чем на 40 модулей. Эти модули регистрируют себя как обработчики событий, возникающих при прохождении запроса, таких как аутентификация, выполнение, отсылка результата обработки и т.п. Поскольку IIS 7 может автоматически загружать .NET Framework в рабочий процесс, модули, созданные на традиционном и «управляемом» коде, могут совместно обслуживать поток запросов. Это означает, что можно создавать HTTP-модули и обработчики и регистрировать их в IIS. Такие модули выполняются внутри IIS и могут обрабатывать любые типы запросов, а не только запросы, обращенные к ASP .NET (рис. 3).
Рис. 3. Обработка запросов в IIS 7
Напомним, в чем заключается различие между обработчиками и модулями. Модули обеспечивают обработку всех запросов; примеры — модуль аутентификации, модуль сжатия и т.п. Обработчики предоставляют сервисы для определенных расширений имен файлов — могут быть ISAPI-обработчики (*.dll) и статические обработчики (*.htm, *.jpg, *.gif и т.п.). В IIS 7 все модули и обработчики могут быть реализованы как на традиционном, так и на управляемом коде. Эти модули и обработчики могут работать либо в рамках интегрированного пула приложения, либо с использованием управляемого кода, либо в рамках классического пуля приложения, в котором используется способ вызова .NET, совместимый с IIS 6.
На рис. 4 показаны основные модули, входящие в состав IIS 7.
Рис. 4. Основные модули, входящие в состав IIS 7
Создание модуля на управляемом коде требует выполнения ряда шагов:
- Создание класса, реализующего интерфейс IHttpModule.
- Написание кода для метода Init, который инициирует модуль и подписывается на события.
- Написание кода для обработки событий, на которые модуль подписан.
- Реализация метода Dispose.
- Регистрация модуля в файле Web.config или в файле Applicationhost.config.
Шаблон модуля на управляемом коде выглядит следующим образом:
public class BasicAuthenticationModule : System.Web.
IHttpModule
{
void Init(HttpApplication context)
{
}
void Dispose()
{
}
}
На рис. 5 показаны основные события, которые могут обрабатываться в модулях.
Рис. 5. Основные события на уровне канала обработки
После того как класс модуля создан, в методе Init мы подписываемся на интересующие нас события:
public void Init(HttpApplication context)
{
//
// Подписаться на событие authenticate для
// выполнения аутентификации
//
context.AuthenticateRequest += new
EventHandler(this.AuthenticateUser);
//
// Подписаться на событие EndRequest для дальней-
шей обработки
//
context.EndRequest += new
EventHandler(this.IssueAuthenticationChallenge);
}
После того как модуль расширения создан, он должен быть добавлен в конфигурацию IIS 7 как глобальный модуль (файл Applicationhost.config); как локальный модуль (файл Application-host.config) — например:
в группу <Global Modules>:
<add
name=”HttpCacheModule”
image=”%windir%\System32\inetsrv\cachhttp.dll”
/>
или в группу <Modules>:
<add
name=”FormsAuthentication”
type=”System.Web.Security.FormsAuthenticationModule”
preCondition=”managedHandler”
/>
или в файл Web.config:
<configuration>
<system.webServer>
<modules>
<add name=”MyBasicAuthenticationModule“
type=”IIS 7Demos.BasicAuthenticationModule” />
</modules>
</system.webServer>
</configuration>
При необходимости можно указать определенную последовательность выполнения модулей. Модули можно добавлять с помощью утилиты IIS Manager, пакетной утилиты APPCMD, через интерфейс WMI, с помощью утилиты PowerShell или программно, используя пространство имен Microsoft.Web.Administration.
Для создания обработчиков на управляемом коде необходимо выполнить следующие шаги:
- Создать класс, реализующий интерфейс IHttpHandler.
- Добавить код для метода ProcessRequest — этот метод получает параметр типа HttpContext, который обеспечивает доступ к встроенным контекстным объектам Request, Response и ряду других.
- Задать значение свойства IsReusable, определяющего, могут ли другие запросы использовать данный обработчик.
- Сконфигурировать обработчик в файле Applicationhost.config или web.config.
Второй механизм расширения — это модульный интерфейс. Как мы помним, утилита администрирования в IIS 6 на базе Microsoft Management Console (MMC) была не очень простой для подключения расширений. Новая утилита в IIS 7 — IIS 7 Manager (IISMGR) поддерживает модульный дизайн, позволяющий добавлять новые управляющие элементы, удалять и добавлять функциональность, добавлять страницы, созданные на базе Windows Forms, интегрировать конфигурацию приложений непосредственно в IISManager и систему конфигурации сервера.
Интеграция с .NET
Впервые в семействе web-серверов компании Microsoft в IIS 7 реализована полная интеграция с ASP .NET, что предоставляет разработчикам и администраторам ряд следующих преимуществ: облегчает администрирование и повышает безопасность приложений, обеспечивает доступ к функциональности .NET на уровне модулей на управляемом коде — аутентификация на базе форм, авторизация на уровне URL, кэширование .NET, применение ролевых провайдеров, использование новых программных интерфейсов для управления IIS 7, возможность развертывания приложений командой Xcopy.
В IIS 6 интеграция с ASP .NET происходила следующим образом: ASP.NET загружалась ISAPI-обработчиком как ISAPI-приложение. Отметим, что в обработчике запросов IIS 6 есть механизм аутентификации, но схожий механизм присутствует и в ASP .NET. В ASP .NET есть собственно отражение обработчиков, так же как и в IIS 6 есть свои обработчики ошибок, система кэширования. Все это есть и в ASP .NET, но работает по-иному, как показано на рис. 6. Такое дублирование приводит к непониманию, какой компонент в конечном счете будет обрабатывать различные активности (см. рис. 6).
Рис. 6. Интеграция с ASP .NET в IIS 6
В IIS 7 возможности ASP .NET перенесены в ядро обработки запросов (так называемое core pipeline). Это сделало возможным применение ASP .NET для всех типов запросов, а не только запросов к .NET-приложениям. Таким образом, если требуется использование аутентификации на базе форм для сайта на PHP, это возможно реализовать в IIS 7. Кроме того, поддержка .NET делает более быстрой возможность реализации новых функций и поддержки новых технологий. При создании модулей на управляемом коде, которые будут применяться в IIS 7, важно помнить о двух режимах, в которых они могут выполняться. В IIS 7 существует два пула приложений: классический, который используется в IIS 6 и вызывает ASP .NET через ISAPI-расширение, и интегрированный пул, когда CLR загружается для предоставления сервисов модулям и обработчикам на управляемом коде. Оба режима показаны на рис. 7.
Рис. 7. Два режима выполнения управляемого кода
В IIS 7 не поддерживается режим IIS 5 — Worker Process Isolation Mode, который позволяет использовать ISAPI-фильтры в режиме Read Raw Data — это невозможно из-за особенностей архитектуры IIS 7. Для поддержки такого режима потребуется применение IIS 6 в режиме совместимости с IIS 5.
Средства управления и администрирования
В состав IIS 7 входит набор различных средств администрирования, в том числе новый пользовательский интерфейс, новая утилита командной строки, новое пространство имен для программного управления и новый программный интерфейс для скриптинга.
Новое в IIS 7 средство администрирования — IIS Manager — предоставляет более эффективный способ управления web-сервером. Эта утилита поддерживает конфигурацию как IIS, так и ASP .NET, позволяет делегировать управление, управлять безопасностью, диагностикой и прочими функциями. К другим особенностям этой утилиты относится поддержка расширяемого интерфейса на основе .NET Framework, поддержка Windows- и не Windows-учетных записей при делегировании управления и возможность удаленного администрирования по HTTP/SSL.
Новая утилита командной стоки (appcmd) служит для администрирования сервера и может считывать и записывать конфигурационные настройки, обращаться к потокам обработки сайтов и приложений и выполнять другие действия, связанные с управлением сервером.
Для управления сервером в IIS 7 включен новый WMI-провайдер (root\WebAdministration), который обеспечивает доступ к конфигурационной информации и состоянию сервера из приложений на VBScript и JScript.
Для приложений на управляемом коде предоставляется новый программный интерфейс, реализованный в пространстве имен Microsoft.Web.Administration. Он может использоваться как для управления сервером, так и для доступа к информации о состоянии сервера, диагностической информации и конфигурации сервера. Ниже показан пример применения программного интерфейса для получения списка запущенных процессов и запросов:
ServerManager iisManager = new ServerManager();
foreach(WorkerProcess w3wp in iisManager. Worker-
Processes) {
Console.WriteLine(“W3WP ({0})”, w3wp.ProcessId);
foreach(Request request in w3wp.GetRequests(0)) {
Console.WriteLine(“{0} — {1},{2},{3}”,
request.Url,
request.ClientIPAddr,
request.TimeElapsed,
request.TimeInState);
}
}
Диагностика и обнаружение ошибок
Быстрое обнаружение и исправление ошибок — одна из новинок в IIS 7, реализованная на уровне новой подсистемы диагностики. Эта подсистема предоставляет администраторам детальную информацию по каждому запросу в реальном времени — с момента получения запроса сервером до его прохождения по всем элементам приложения. Эти возможности IIS 7 сокращают необходимость в анализе дампов и позволяют конфигурировать настраиваемые обработчики для URL. В этих обработчиках можно собирать информацию о времени, потраченном на обработку запроса (например: «записать в журнал все ответы с кодом 200 (ok), которые заняли более 15 с»), коды статуса и подстатуса HTTP (например: «записать в журнал все ошибки с кодом 500 для Invoice.aspx»), а также коды ошибок. Диагностикой можно управлять из интерфейса администратора, через WMI, программные интерфейсы, а также из пакетной утилиты Appcmd.
Помимо этого можно обрабатывать трассировочные события для модулей, обработчиков и ASP .NET-страниц. Преимущества трассировки в IIS 7, по сравнению с трассировкой на уровне ASP .NET, заключаются в том, что в IIS журналы сохраняются на диске, обрабатываются по запросу и обновляются в контексте всей обработки запроса. Таким образом, данные, записываемые в этих журналах, сохраняются в XML и могут быть преобразованы стандартными средствами XSL — данные из таких журналов более просты в потреблении другими утилитами и предоставляют структурированные структуры и метаданные.
Хостинг web-сервисов
Обычно IIS ассоциируется с web-сервером, обеспечивающим хостинг web-страниц и приложений, доступных web-браузерам по протоколу HTTP. В IIS 6 была введена концепция «пулов приложений» — мощной среды выполнения, задающей границы процессов для web-сайтов и приложений, идентификаторы процессов, а также способы повторного использования ресурсов, активации и завершения работы. Пулы приложения являются мощным средством для web-администраторов, позволяющим изолировать приложения и управлять их работой.
В IIS 7 подход, реализованный в IIS 6 для пулов приложений на уровне протокола HTTP, стал доступным и для других протоколов. Этот сервис, не зависящий от протоколов, называется Windows Process Activation Service и предназначен в первую очередь для обслуживания сервисов, созданных на базе Windows Communication Foundation — компонента .NET Framework 3.0, позволяющего выбирать адаптеры протоколов, используемых для активации сервисов. Сервис Web Activation Service (WAS) поддерживает активацию по протоколам TCP, Named Pipe, MSMQ или HTTP, обеспечивает внешний мониторинг, повторное использование освобождаемых ресурсов, общий доступ к состоянию сервисов из ASP .NET и ряд других полезных функций.
Заключение
В данном обзоре были рассмотрены основные новинки в Internet Information Services 7.0: возможности для администраторов и ИТ-специалистов, web-хостеров и разработчиков, а также модульная архитектура, механизмы расширения, интеграция с .NET, управляемость и расширенные средства диагностики.
В следующих номерах мы продолжим знакомство с Windows Server 2008.