Самая популярная сегодня информационная технология - это Web, ядром которой является сервер, обслуживающий запросы универсальных браузеров. Очевидно, что от эффективности работы сервера зависит очень многое. В этой связи, книга «Writing Apache Modules with Perl and C», посвященная программированию модулей самого популярного на сегодня HTTP-сервера Apache будет весьма полезна администраторам Web-узлов и разработчикам Web-приложений. Учитывая, что в российской части Internet Apache распространен больше, чем во всем остальном мире, эта книга наверняка станет настольной для многих российских Web-администраторов и Web-программистов.
Сервер Apache используется в качестве базового ПО на 50% узлов Web. Это неудивительно: Apache - свободно распространяемый, компактный и хорошо документированный программный продукт. По сравнению с остальными серверами, предназначенными для поддержки Web-узлов, размер кода Apache выглядит неправдоподобно маленьким. В отличие от большинства свободно распространяемых продуктов Apache прекрасно документирован. Среди достоинств этого продукта - высокая скорость обработки запросов и эффективность использования ресурсов вычислительной установки, переносимость, поддержка со стороны коллектива разработчиков, богатое наследие ПО, стабильность и надежность, постоянное обновление, расширяемость и простота администрирования. Эффективность сервера определяется качеством его кода - примерно 25000 строк на языке Си. Собственно, главной задачей проекта Apache было и остается создание высокопроизводительного сервера, построенного по модульной схеме, что позволяет обеспечивать его компактность и настройку на конкретные потребности того или иного Web-узла.
Сегодня Apache может работать на всех платформах, которые так или иначе используются в Internet: все без исключения Unix-системы, системы на основе Windows и NT, OS/2 и мэйнфреймы. При этом сервер легко переносится и на другие платформы. Поддержка Apache обеспечивается сообществом разработчиков, причем не только тех, что стояли у истоков проекта, но и многими программами во всем мире, которые разработали модули сервера, обеспечивающие его поразительную гибкость при настройке на конкретные задачи. Новые версии сервера обязательно тестируются множеством добровольцев Сети. Это позволяет выявлять нестандартные ошибки, чего трудно добиться при обычных методах тестирования. Администратор всегда может выбрать версию по степени надежности или богатству возможностей.
Архитектура Apache делает его одним из самых гибких серверов Сети. Спецификация API-интерфейса сервера позволяет наращивать его мощь за счет дополнительных модулей без изменения ядра системы. Apache легко администрировать - совокупность файлов настройки давно уже стала привычной для большинства администраторов Сети, что позволяет им без труда переходить с одной версии сервера на другую. Для тех, кто знакомится с сервером впервые, существуют более простые и современные схемы его администрирования, что позволяет не изучать «историческое наследие» и первоисточники.
Собственно говоря, книга «Writing Apache Modules with Perl and C» не о настройке и эксплуатации сервера Apache, а о разработке модулей этого сервера, существенно расширяющих его возможности.
В заглавии книги первым указан язык программирования Perl, что далеко не случайно. Почти 70% материала посвящено вопросам разработки модулей на Perl. Дело в том, что долгое время основным инструментом расширения функциональных возможностей серверов были скрипты, написанные в соответствии со спецификацией CGI. Программы данного типа являются внешними по отношению к серверу. Их вызов сопряжен с созданием отдельного процесса, который вместе с другими приложениями борется за ресурсы вычислительной установки, в том числе и с самим сервером, но существует при этом очень недолго. Время исполнения скрипта обычно сравнимо со временем создания его процесса. Объем программного обеспечения, написанного для Web в виде CGI-скриптов, огромен - практически нет ни одной типовой задачи Web, которую нельзя было бы решить средствами уже существующих скриптов. Большинство из них написано на Perl. Этот язык обладает рядом механизмов, которые чрезвычайно высоко ценят разработчики программного обеспечения для Web, например регулярными выражениями, позволяющими разбирать запрос из HTML-формы в одной строке Perl-кода.
В 1996 году один из авторов книги, Doug MacEachern, разработал модуль Apache mod_perl - полноценный интерпретатор Perl, не требующий создания процесса для внешнего интерпретатора. Более того, в большинстве систем Apache собирают таким образом, чтобы можно было использовать единственную копию интерпретатора для всех процессов. Если при программировании модулей на Си требуется перекомпиляция сервера, то при разработке модулей на Perl с применением модуля mod-perl такая операция не нужна. Кроме того, вызов модуля с ошибками не приводит к сбою сервера - интерпретатор фиксирует ошибку и завершает работу модуля.
По своей мощи механизм разработки модулей Apache на Perl сравним только с механизмом программирования Web-приложений в рамках спецификации CGI, но при этом модули выполняются гораздо быстрее. Самое интересное, что mod_perl позволяет задействовать готовое ПО, разработанное как CGI-скрипты. Кроме того, язык Perl можно использовать как язык вложений на стороне сервера - это означает, что фрагменты Perl можно включать в текст HTML-документов. Перед отправкой отклика на запрос браузера сервер выполнит код и, если необходимо, подставит результат его исполнения в HTML-документ. При этом mod_perl позволяет реализовывать и другие механизмы SSI. В частности, посредством Perl в Apache реализован механизм Active Server Pages, столь популярный среди разработчиков для платформы Microsoft. Однако книга не только описывает технологию программирования модулей Apache на Perl, но и служит руководством по программированию модулей Apache на Си.
Книга состоит из одиннадцати глав и шести приложений, в которых подробно, излагается процесс программирования модулей сервера различными средствами.
В первой главе рассматриваются основы прикладного программирования на стороне сервера, подробно разбираются преимущества и недостатки тех или иных спецификаций. Имеется даже таблица сравнения различных технологий программирования и спецификаций: CGI, FastCGI, Server API, SSI, DHTML, Java, встроенный Perl и интегрированные системы. В этой же главе авторы рассказывают историю Apache и определяют путь развития спецификаций прикладного программирования для данного сервера.
Во второй главе описан процесс создания простого модуля на Perl и Си. Здесь изложена последовательность написания такого модуля, встраивания его в сервер и коррекции файлов настройки. При этом половина главы посвящена установке ПО сервера на вычислительную систему и процедуре его сборки. На проблемах пользователей Windows авторы остановились особо - процесс компиляции сервера в их случае связан с использованием коммерческого ПО, практика применения которого может отличаться от привычной технологии для Unix-платформ.
В третьей главе речь идет об архитектуре модулей Apache и интерфейсе прикладного программирования. Естественно, что глава начинается с обсуждения протокола обмена гипертекстовой информацией HTTP. Кратко описаны методы доступа и типы HTTP-сообщений, а также способы тестирования через интерфейс telnet. Затем авторы разбирают жизненный цикл сервера, состоящий из нескольких этапов: старт и настройка, инициализация модулей, инициализация потомков, цикл обработки запроса и завершение работы. Как выяняется, часть изменений в файлах настройки требует перезагрузки сервера, что не всегда очевидно при чтении документации Apache.
Наиболее интересным этапом является цикл обработки запроса. Он состоит и восьми фаз: трансляция URI, контроль доступа, аутентификация, авторизация, проверка MIME-типа, генерация отклика, запись в журнал и освобождение ресурсов. Для каждой фазы в Apache существуют обработчики. Собственно, любой модуль Apache - это набор обработчиков фаз обработки запроса. Для каждой фазы обработки запроса Apache последовательно опрашивает модули на предмет наличия в них обработчиков соответствующей фазы. Совершенно необязательно, чтобы исполнялись все обработчики. Если действие одного из них приводит к ситуации, когда применение остальных теряет смысл, то выполнение этих обработчиков может быть пропущено.
Четвертая глава посвящена самой важной фазе обработки запроса - генерации содержания отклика сервера. Обсуждение начинается с простых вещей, например, со вставки в документ внешних файлов.
Многочисленные примеры иллюстрируют возможности перенаправления запросов, проверки времени последней модификации страницы и построения виртуальных документов, а также средств настройки обработчиков фазы генерации содержания отклика. Рассказывая о последней возможности, авторы строят общее навигационное меню, которое при необходимости настраивается отдельно от всего остального содержания страниц Web-узла. Специальный раздел книги посвящен разбору примеров по обработке данных из форм, где Apache выступает в качестве интерпретатора кода. Для этой цели используется модуль Apache::Registry, позволяющий задействовать Perl-CGI-скрипты непосредственно с mod_perl .
Пятая глава книги целиком посвящена одной из насущных проблем HTTP-обмена - поддержке состояния сеанса работы между пользователем и системой. Здесь речь идет прежде всего о разграничении доступа по идентификаторам пользователей и поддержке сложных транзакций при работе с базами данных. Авторы определяют шесть способов поддержки состояния: хранение состояния в невидимых полях форм, cookies, URI, памяти сервера, внешнем файле и в базе данных. Все эти способы разбираются на примере игры, в которой важен результат предыдущего обращения к серверу - важна история обменов информацией.
В шестой главе рассматриваются вопросы аутентификации и авторизации. Сразу следует уточнить, что авторы в данном случае остаются в пределах базовой схемы контроля доступа и не касаются вопросов работы по защищенным протоколам. Из материалов данной главы следует, что и при таком подходе можно существенно повысить защищенность системы, хотя такую степень защиты, как дает, например, механизм SSL, конечно, обеспечить нельзя.
Седьмая глава посвящена другим фазам обработки запроса клиента. Восьмая - одиннадцатая главы представляют собой справочники. Здесь подробно описан механизм настройки процесса конфигурации сервера через модули Apache; приведены руководства по работе с Perl API и Cи API. В целом справочное руководство представлено достаточно полно, что позволяет изучить предмет самостоятельно.
В заключение несколько слов об авторах. Линкольн Штейн пишет книги по программированию приложений для Web. Среди них особенно заслуживает внимания «Official Guide to CGI.pm» - книга об использовании модуля CGI.pm для разработки приложений в соответствии со спецификацией CGI на языке Perl. Doug MacEachern - автор модуля mod_perl, что во многом и определило содержание книги.
Книгу можно заказать в компании Фольком Холдинг-Центр. Электронная почта: books@df.ru
Lincoln Stein and Doug MacEachern. Writing Apache Modules with Perl and C. O Reilly & Associates Inc., 1999, p.724, IS-BN: I-56592-567-X