 | Внедрение web-сервера
Туча демонов
Запуск Apache похож на запуск любого другого демона. Обычно хочется поместить запуск в скрипт инициализации системы, однако, в принципе, можно запускать Apache в любое время. В большей части систем сервер Apache называется httpd, хотя он может вместо этого называться и apache2. Вероятнее всего, сервер установлен в /usr/sbin/, но возможны и другие расположения, в зависимости от вашего дистрибутива и от того, как вы установили сервер.
Чаще всего Apache запускается без опций, хотя об опциях -d serverroot и -f config следует помнить. Первая позволяет указывать расположение локального каталога, откуда поставляется содержимое; вторая позволяет указывать конфигурационный файл, отличный от используемого по умолчанию. Файл конфигурации может отменять опцию -f с помощью директивы ServerRoot. По умолчанию, конфигурационными файлами являются либо apache2.conf, либо httpd.conf, в зависимости от установок при компиляции. Эти файлы, скорее всего, располагаются в /etc/apache2/, /etc/apache/, /etc/httpd/conf/, /etc/httpd/apache/conf, или в каких-нибудь других местах, в зависимости от версии, дистрибутива Linux, и от того, как вы установили и скомпилировали Apache. Вызов man apache2 или man httpd должен выдать вам системно-зависимые подробности.
Демон Apache отличается от других серверов тем, что он обычно создает несколько выполняющихся копий самого себя. Первичная копия просто порождает остальных, в то время как эти вторичные копии и обслуживают входящие запросы. Целью наличия множества запущенных копий является создание набора обработчиков на случай нескольких одновременных запросов к серверу; при необходимости могут запускаться дополнительные копии демона в соответствии с параметрами конфигурации. Первичная копия обычно запускается от root, но остальные копии по соображениям безопасности запускаются как более ограниченный пользователь. Например:
Listing 1. The многоликость выполняющихся копий Apache
# ps axu | grep apache2
root 6620 Ss Nov12 0:00 /usr/sbin/apache2 -k start -DSSL
www-data 6621 S Nov12 0:00 /usr/sbin/apache2 -k start -DSSL
www-data 6622 Sl Nov12 0:00 /usr/sbin/apache2 -k start -DSSL
www-data 6624 Sl Nov12 0:00 /usr/sbin/apache2 -k start -DSSL
dqm 313 S+ 03:44 0:00 man apache2
root 637 S+ 03:59 0:00 grep apache2
|
На большом числе систем ограниченным пользователем является nobody. В Listing 1 это -- пользователь www-data.
Включение конфигурационных файлов
Как уже упоминалось, поведение Apache определяется директивами в его конфигурационном файле. Для систем Apache2, главный конфигурационный файл, скорее всего, находится в /etc/apache2/apache2.conf, но часто этот файл содержит многочисленные Include statements для добавления информации о конфигурации из других файлов, возможно, даже с шаблонами. В общем случае, конфигурация Apache, вероятно, содержит сотни директив и опций (большая часть которых не описывается в этом пособии).
В частности, несколько файлов, вероятно должны быть включены. Можно взглянуть в настройки "пользователей" файла httpd.conf, для использования прежних Apache 1.3 файлов конфигурации, использующих то же имя. Виртуальные хосты обычно задаются в отдельных конфигурационных файлах, соответствующих шаблону, например, вот так:
Listing 2. Задание виртуальных хостов
# Include the virtual host configurations:
Include /etc/apache2/sites-enabled/[^.#]*
|
При использовании Apache 2.x, модули обычно тоже определяются в отдельных конфигурационных файлах (более часто в том же файле в 1.3.x). Например, в моей системе включения таковы:
Listing 3. From /etc/apache2/apache2.conf
# Include module configuration:
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
|
Фактически использование модуля в запущенном сервере Apache требует два шага в файле конфигурации, оба загружающих и и активирующих его:
Listing 4. Загрузка дополнительного модуля Apache
# cat /etc/apache2/mods-enabled/userdir.load
LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so
# cat /etc/apache2/mods-enabled/userdir.conf
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
</Directory>
</IfModule>
|
Шаблоны в строках Include вставят все файлы .load и .conf в каталоге /etc/apache2/mods-enabled/
Обратите внимание на общую мысль: Основные директивы -- это команды в одну строку с некоторыми параметрами; более сложные директивы используют XML-льный тег открыть/закрыть для вложенных команд. Является ли директива однострочной или же стиль открыть/закрыть, следует знать -- по своему усмотрению стили выбирать нельзя.
Файлы журнала
Важный класс директив конфигурации касается журналирования действий Apache. Можно задавать различные типы информации и степени детализации для операций Apache. Ведение журнала ошибок всегда приветствуется; это можно задать одной директивой:
Listing 5. Задание журнала ошибок
# Global error log.
ErrorLog /var/log/apache2/error.log
|
Можно добавить другие журналы для записи обращений к серверу, ссылающего сайта, и другой информации, удовлетворяющей вашим индивидуальным целям. Операция журналирования настраивается двумя директивами. Сначала директива LogFormat использует набор специальных переменных для задания, того, что помещать в файл журнала; затем, директива CustomLog говорит Apache actually записывать события в указанном формате. Можно задать бесчисленное число форматов невзирая на то, используются ли они на самом деле. Это позволяет включать и выключать журналирование подробностей, в зависимости от меняющихся потребностей.
Переменные в LogFormat похожи на переменные оболочки, но имеют в начале %. Некоторые переменные состоят из одной буквы, в то время как другие имеют длинные имена, окруженные скобками, как показано в Listing 6.
Listing 6. Переменные LogFormat
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/apache2/referer_log combined
|
Обратитесь к книге с полной документацией Apache за списком всех переменных. Широко используются следующие: %h для IP-адреса клиента, выполняющего запрос,
%t для дати и времени запроса, %>s для HTTP статуса кода, и написанный с ошибкой %{Referer} для адреса ссылающего сайта, на котором есть ссылка на обрабатываемую страницу.
Имена, используемые в директивах LogFormat и CustomLog являются произвольными. В Listing 6 использовалось имя combined, но вместо нее могла стоять, например, myfoobarlog. Однако несколько имен являются общепринятыми и даются в образцах файлах конфигурации, такие как combined,
common, referer, и agent. Эти специальные форматы зачастую поддерживаются утилитами, анализирующими log-файлы.
|  |