Apache обычно запускается как системный daemon или служба с родительским процессом (или же потоком), контролирующим ряд дочерних процессов или потоков, которые выполняют обработку запроса. Помимо определенных основных функций, большинство мелких функций реализуется с помощью модулей, которые могут быть статически связаны с сервером или динамически загружаться при запуске.
Операционные системы различаются по способу реализации таких функций, как работа в сети и многопроцессорность. Apache версии 2.0 представил модули MultiProcessing Modules (MPM) для обеспечения моделей сетей и планирования, адаптированных к конкретным операционным системам и моделям использования. MPM используют нативные функции операционной системы и обеспечивают планирование с использованием процессов, потоков или их сочетания. Apache использует только один MPM в любое время, и он должен быть статически скомпилирован в сервер.
MPM, другие модули и основной веб-сервер основаны на Apache Portable Runtime (APR), который обеспечивает согласованный, независимый от платформы интерфейс к базовой операционной системе. APR включает API для доступа к базам данных SQL и серверам LDAP; они используются в двух базовых модулях, mod_dbd и mod_ldap, которые предоставляют общие возможности, которые могут использовать другие модули.
Обзор операционной части
При запуске Apache проходит этап инициализации перед переходом в рабочее состояние. На этапе инициализации Apache считывает и проверяет свои файлы конфигурации, открывает сетевые подключения и файлы журналов, получает системные ресурсы и создает пул дочерних процессов или потоков, которые будут обрабатывать запросы. Apache обычно запускается с привилегиями root, но отказывается от этих привилегий до того, как входит в рабочее состояние.
Как только Apache вошел в рабочее состояние, дочерние процессы или потоки обрабатывают входящие запросы. Запросы обрабатываются в несколько этапов, и каждый этап предоставляет несколько хуков для участия модулей в обработке. Для каждого хука Apache вызывает зарегистрированные функции по очереди до тех пор, пока они не будут вызваны, или пока одна из них не покажет, что обработка для этого хука завершена или что произошла ошибка.
Модули регистрируют обработчики для фаз, на которых они должны влиять на обработку запроса. Как правило, модуль регистрирует обработчики только для одной или двух фаз.
Как получить доступ к Apache
Веб-сервер Apache доступен для большинства современных вычислительных платформ - большинство дистрибутивов Linux и BSD предлагают его в виде стандартного пакета, и он включен в Mac OS X. Бинарные пакеты для Microsoft Windows доступны на веб-сайте Apache и в его зеркалах, а также исходные и другие бинарные пакеты. Желательно ознакомиться с особенностями используемого вами дистрибутива, так как упаковщики в обязательном порядке изменяют детали в соответствии с соглашениями их целевой платформы.
В качестве альтернативы, компиляция Apache из исходного кода довольно проста и дает преимущество в том, что дает полный контроль над тем, как он собран, какие модули статически включены в сервер и т. д. Исходный дистрибутив включает в себя инструкции по процессу сборки.
Запуск и остановка Apache
В большинстве упакованных дистрибутивов Apache сервер запускается автоматически при загрузке системы и останавливается при остановке системы.
В Unix-подобных системах Apache обычно работает как присоединенный процесс. Скрипт оболочки apachectl входит в состав Apache для автоматизации процесса запуска и остановки этого процесса. Такой скрипт обычно вызывается сценарием запуска системы. Apache ответит на следующие запросы, отправленные родительскому процессу:
- TERM. Останавливает сервер, заставляя родительский процесс попытаться уничтожить каждый из дочерних процессов, а затем завершить сам себя;
- HUP. Перезапускает сервер, заставляя родительский процесс завершать работу каждого из дочерних процессов, перечитывать файлы конфигурации и затем создавать новые дочерние процессы. Статистика сервера обнуляется при перезапуске;
- USR1. Инициирует постепенный перезапуск. Дочерние процессы завершаются либо после обработки текущего запроса, либо сразу, если в данный момент не обслуживают запрос. Порождающий процесс сканирует файлы конфигурации и начинает порождать новые дочерние процессы, чтобы поддерживать соответствующее количество процессов сервера. Статистика сервера не сбрасывается при постепенном перезапуске;
- WINCH. Инициирует корректную остановку. Дочерние процессы завершаются либо после обработки текущего запроса, либо сразу, если в данный момент не обслуживают запрос. Родительский процесс удаляет файл PID и прекращает прослушивание на всех портах, но продолжает мониторинг до тех пор, пока не останутся все оставшиеся дочерние элементы или не истечет время ожидания.
В Windows, если Apache был установлен в качестве службы, его можно запустить и остановить, используя команды NET START и NET STOP с помощью Apache Service Monitor.
Файлы конфигурации
Каждый аспект поведения Apache контролируется директивами, хранящимися в его файлах конфигурации. Когда Apache запускается или перезапускается, он сначала читает файл конфигурации основного сервера из расположения по умолчанию или из расположения, указанного в аргументе командной строки -f. Другие файлы конфигурации могут быть включены в директиву Include.
Файлы конфигурации – это простые текстовые файлы, которые содержат директивы конфигурации, пустые строки и комментарии. Начальные пробелы в строке игнорируются, как и пустые строки. Строки, начинающиеся со знака хеш (#), рассматриваются как комментарии.
Формат конфигурационной директивы
Директивы конфигурации Apache описываются в стандартном формате, как показано здесь:
Если установлено значение ON, то запросы, которые сопоставляются с каталогом, но не заканчиваются косой чертой, будут перенаправлены на тот же URL с добавленной косой чертой, позволяя автоматически работать индексам каталогов и относительным URL.
Верхняя строка дает название директивы слева, а список контекстов, в которых директива может использоваться – справа, с использованием аббревиатур. Если директива может использоваться в файле конфигурации для каждого каталога и управляется категорией директивы AllowOverride, ключевое слово category включается в круглые скобки после сокращений контекста.
Главный сервер и виртуальные хосты
Apache настроен с помощью директивы Listen для прослушивания нескольких IP-адресов на одном или нескольких портах. Без каких-либо определений виртуального хоста все запросы будут ссылаться на главный сервер.
Виртуальные хосты определяются с использованием разделов <VirtualHost>, но они действуют только в том случае, если Apache прослушивает IP-адрес и порт, указанные в директиве <VirtualHost> открытия. Если директива NameVirtualHost не указана, все виртуальные хосты основаны на IP-адресе.
Директивы NameVirtualHost используются для обозначения IP-адресов с дополнительными номерами портов, которые будут принимать запросы для виртуальных хостов на основе имен. Вместо IP-адресов можно использовать имена хостов. Apache определяет виртуальный хост, который будет использоваться, сопоставляя значение заголовка хоста при запросах, поступающих на эти IP-адреса и порты, с именем сервера или псевдонимами, определенными в разделах виртуального хоста, где адрес и порт в директиве <VirtualHost> точно совпадают значения в директиве NameVirtualHost. Обратите внимание, что виртуальные хосты на основе имен не работают с HTTPS-соединениями, поскольку имя хоста необходимо для установки безопасного соединения, но его можно извлечь из заголовков HTTP только после того, как соединение установлено.
Это контейнер для директив, которые относятся только к какому-то конкретному виртуальному хосту. addr может играть роль IP-адреса или же быть полным доменным именем для виртуального хоста; это также может быть литерал _default_, который будет равняться любому IP-адресу, явно не указанному в другом разделе виртуального хоста. Номер порта можно указать с помощью порта. Адрес и порт могут быть одновременно представлены как *, чтобы имитировать любой адрес или порт соответственно.
Устанавливает IP-адрес для последующих разделов виртуального хоста на основе имен.
Адрес электронной почты или URL включены в сообщения об ошибках, сгенерированные Apache.
Альтернативные имена для хоста, используемые с виртуальными хостами на основе имен.
Стандартные атрибуты документа
После перевода URL-адреса запроса и применения контроля доступа Apache определяет специальные характеристики возвращаемого документа, такие как язык, тип содержимого, набор символов и кодировка документа.
Четыре стандартных атрибута используются для согласования содержимого документов. Клиенты указывают предпочтения в заголовках запросов Accept*, а атрибуты выбранного документа используются для установки заголовков ответов.
- Content language. Естественный язык документа, такой как en-gb для британского английского, es-mx для мексиканского испанского или zh для неквалифицированного китайского. Предпочтения клиента указываются в заголовке Accept-Language, а язык выбранного документа возвращается в заголовке Content-Language;
- Content type. MIME-тип документа, такой как text/ html или image/png; предпочтения указываются с помощью Accept, а MIME-тип документа возвращается в Content-Type;
- Character set. Набор символов MIME также называется кодировкой символов. Например, utf8, shift-jis или iso-8859-1; предпочтения указываются с помощью Accept-Charset, а набор символов документа возвращается в параметре charset в заголовок Content-Type;
- Content encoding. Кодировка документа, такая как сжатие, дефляция, gzip или идентификация; предпочтения указываются с помощью Accept-Encoding, а кодировка документа возвращается в Content-Encoding.