@ Карта сайта News Автора!

Bog BOS: Apache 2: HTTP сервер. Установка, настройка

apache inn MySQL nntpcache Cyrus IMAP exim Squid ssh syslog tacacs ProFTPD wu-ftpd xntpd

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL

Последнее изменение файла: 2011.10.24
Скопировано с www.bog.pp.ru: 2024.11.23

Bog BOS: Apache 2: HTTP сервер. Установка, настройка

Apache - самый распространённый HTTP сервер. Распространяется бесплатно, включая исходные тексты (своя лицензия). Поддерживаются сценарии на CGI (включая FastCGI), PHP, perl, Java. Аутентификация - базовая, message-digest, TLS (SSL).

Для обеспечения работы MPM с потоками сценарии CGI запускаются отдельным демоном.

В статье описывается только Unix версия:

Старая версия статьи про Apache 1.3.

Файл настройки

Настройка сервера осуществляется с помощью текстового файла httpd.conf (при сборке по умолчанию - /usr/local/apache2/conf/httpd.conf), состоящего из директив. Имя файла можно изменить при запуске сервера ключом "-f". Директива Include позволяет вставлять содержимое дополнительных файлов (можно указывать шаблон имени или имя каталога). Для вступления в действие изменений файла настройки необходимо перезапустить сервер. Некоторые директивы могут ссылаться на дополнительные файлы с другим синтаксисом. Каждая директива располагается на отдельной строке. Продолжение на следующую строку делается с помощью символа '\' в конце строки. Комментарии начинаются с символа '#'. Пробелы в начале строки игнорируются.

Сервер состоит из множества модулей, которые могут выбираться при сборке или загружаться динамически. Модуль Core отключить нельзя. Каждая директива определяет поведение одного из модулей и имеет смысл только, если этот модуль включен при сборке или с помощью динамической загрузки. Директивы могут выполняться в зависимости от наличия модуля (секция IfModule) или установки параметра при запуске сервера (секция IfDefine).

Секция IfDefine включает директивы, применяемые только если при запуске сервера была установлена (не установлена) соответствующая переменная (ключ -D):

<IfDefine [!]имя-переменной>
...
</IfDefine>

Секция IfModule включает директивы, применяемые только при наличии (отсутствии) указанного модуля:

<IfModule [!]имя-модуля>
...
</IfModule>

Директивы могут иметь следующие области действия (секции могут быть вложенными, каждая директива имеет набор допустимых контекстов - буквы SVDFLA указываются при описании директив):

Дополнительные файлы настройки читаются при каждом запросе из каталога и его надкаталогов (сверху вниз, следующий имеет больший приоритет). Обычно имеют имя файла ".htaccess". Директива AccessFileName (SV) позволяет задать другое имя файла или имена (через пробел).

Директива AllowOverride (D, кроме DirectoryMatch) позволяет определить типы директив, допустимых в дополнительном файле настройки (директива также должна быть вообще допустима в контексте A):

Секция VirtualHost (S) включает директивы, применяемые для запросов к указанному хосту ("*" означает любой адрес или любой порт; "_default_" - адреса, не указанные в других секциях):

<VirtualHost имя-или-адрес[:порт] [ имя-или-адрес[:порт] ...]>
...
</VirtualHost>

Секция Directory (SV) включает директивы, применяемые только к запросам файлов из указанного в заголовке секции каталога и его подкаталогов (вместо полного имени каталога можно указывать шаблон в стиле Unix (?*[]) или регулярное выражение в кавычках, перед которым необходимо указать строку "~ "), нельзя вкладывать в секции Directory и Limit:

<Directory имя-каталога>
...
</Directory>

Секция DirectoryMatch (SV) включает директивы, применяемые только к запросам файлов из указанного в заголовке секции каталога и его подкаталогов, нельзя вкладывать в секции Directory и Limit:

<DirectoryMatch регулярное-выражение>
...
</Directory>

Секция Files (SVDA) включает директивы, применяемые только к запросам файлов с указанным в заголовке секции простым именем (вместо простого имени можно указывать шаблон в стиле Unix (?*[]) или регулярное выражение в кавычках, перед которым необходимо указать строку "~ "):

<Files простое-имя-файла>
...
</Files>

Секция FilesMatch (SVDA) включает директивы, применяемые только к запросам указанного в заголовке секции файла:

<FilesMatch регулярное-выражение>
...
</FilesMatch>

Секция Location (SV) включает директивы, применяемые только к запросам URL, указанным в заголовке секции (для локальных - не прокси - запросов нельзя указывать схему, имя хоста, номер порта и строку запроса; можно указывать шаблон в стиле Unix (?*[]) или регулярное выражение в кавычках, перед которым необходимо указать строку "~ ")

<Location начальная-часть-URL>
...
</Location>

Секция LocationMatch (SV) включает директивы, применяемые только к запросам URL, указанным в заголовке секции:

<LocationMatch регулярное-выражение>
...
</LocationMatch>

Секция Limit (SVDFLA) включает директивы управления доступом, применяемые только к запросам указанного в заголовке секции HTTP методам доступа (GET (действует также на HEAD), POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK; TRACE указывать нельзя):

<Limit метод [ метод ...]>
...
</Limit>

Секция LimitExcept (SVDFLA) включает директивы управления доступом, применяемые к запросам не указанных в заголовке секции HTTP методов доступа:

<LimitExcept метод [ метод ...]>
...
</LimitExcept>

Порядок применения директив определения свойств и прав доступа к объекту (все секции одного типа, кроме Directory и .htaccess, применются по порядку; Directory и .htaccess применяются от кратчайшего пути к самому длинному; секции внутри VirtualHost применяются после соответствующих общих секций):

  1. секция Directory (кроме регулярных выражений) и .htaccess (.htaccess перебивает Directory, если разрешено директивой AllowOverride)
  2. секция DirectoryMatch и Directory с регулярными выражениями
  3. секции Files и FilesMatch
  4. секции Location и LocationMatch

Директивы модуля Core

Общие характеристики сервера или виртуального сервера:

Ограничения на потребление ресурсов и оптимизация:

Вариации протокола взаимодействия с клиентами и путь обработки запроса:

Аутентификация и авторизация:

Модули управления процессами (MPM)

В отличие от первой версии Apache 2 может использовать различные модули управления процессами (MPM). Сервер может быть собран только с одним MPM. MPM осуществляет запуск процессов, потоков и привязку запросов клиентов к процессу или потоку. Область действия всех директив, кроме AssignUserID - сервер. Типы MPM:

Общие директивы:

Базовые модули (для Unix)

Базовые модули входят в состав сервера при сборке по умолчанию:

Модули расширения (для Unix)

Модули расширения необходимо добавить явно при сборке apache:

Экспериментальные модули (для Unix)

Экспериментальные модули необходимо добавить явно при сборке apache:

Переменные окружения

Сервер позволяет обмениваться информацией с внешними программами (CGI) и между модулями с помощью переменных окружения. Имя пременной должно начинаться с буквы и может содержать буквы, цифры и подчёркивания. Перед вызовом CGI сервер устанавливает переменные запроса в соответствии со стандартом (и кое что от себя, некоторые модуля добавляют свои переменные):

Директивы модуля env:

Модуль setenvif позволяет устанавливать переменные в зависимости от характеристик запроса (директивы выполлняются последовательно):

Директива RewriteRule модуля rewrite имеет опцию установки переменной окружения.

Модуль unique_id уставливает "уникальное" для каждого запроса значение в переменную UNIQUE_ID.

Использование переменных в модулях:

Специальные переменные окружения, меняющие обработку запроса сервером:

Журналы

Журнал ошибок управляется директивами ErrorLog и LogLevel модуля Core. Кроме сообщений сервера сюда направляется вывод на stderr скриптов CGI, вывод модуля dumpio.

Журнал доступа управляется модулем log_config, который позволяет задать имя файла и формат вывода. Данный журнал содержит записи о всех (если не отфильтровано директивой CustomLog) запросах к серверу. Каждый виртуальный сервер может вести произвольное число журналов в различных форматах.

Каждый запрос к серверу порождает строку в журнале, состоящую из элементов (token), разделенных пробелами. Пустой элемент записывается как символ '-'. Если элемент содержит пробелы, то он должен заключаться в кавычки (это надо самому предусмотреть при описании формата). При описании формата используются литеральные символы, которые копируются в журнал (можно использовать '\n' и т.п.; кавычки и обратная косая должны быть прикрыты символом '\') и директивы, которые начинаются с символа '%' и завершаются однобуквенным именем директивы. Между ними может стоять условие в виде списка кодов завершения HTTP через запятую (м.б. предваренных восклицательным знаком для операции отрицания) - если условие не выполняется, то вместо элемента записывается минус. Модификаторы перед буквой директивы позволяют определить (в случае внутреннего перенаправления) атрибут исходного ('<') или результирующего ('>') запроса будет использоваться при создании строки журнала. Директива в описании формата замещается соответствующим значением:

Директивы модуля log_config (рекомендуется использовать только LogFormat для определения формата и CustomLog для создания журнала):

Модуль cgi имеет директиву ScriptLog, которая позволяет записывать весь ввод/вывод CGI скриптов. Модуль rewrite позволяет записывать относящуюся к преобразованию адресов информацию в отдельный файл (RewriteLog и RewriteLogLevel). Модуль dumpio записывает все входящие сообщения после декодирования SSL (DumpIOInput On) и/или все выходящие сообщения до кодирования SSL (DumpIOOutput On) в журнал ошибок.

Модуль log_forensic записывает в журнал полный текст заголовка запроса до и после обраьотки. Требует наличия модуля mod_unique_id. Уникальный идентификатор запроса может быть записан в обычный журнал директивой формата "%{forensic-id}n". Директива:
SV ForensicLog имя-файла-или-канала.

Каталог с журналами должен быть закрыт от записи посторонними. Журналы хранят информацию, полученную непосредственно от клиентов, и могут содержать управляющие символы (после 2.0.46 они заменяются на последовательности вида \x01; '"' преобразуются в '\"'; '\' - в '\\'; табуляции и т.п. - в '\n', '\t'), так что смотреть их надо осторожно.

Обработка журналов осуществляется внешними программами, например, analog или webalyzer. Чтобы удалить старые журналы необходимо переименовать их, затем перезапустить сервер (apachectl graceful), подождать пока закончится обработка текущих запросов и только после этого можно перемещать или сжимать старые журналы.

Аутентификация и авторизация

authentication - это установление личности пользователя (имя пользователя не длинее 255 символов и не может содержать символ ':'), а authorization - проверка полномочий на выполнение каких-либо действий.

При аутентификации сервер определяет директивой ядра AuthName какой домен (realm) авторизации клиент должен использовать при аутентификации; выдаётся на экран при запросе имени и пароля. Директивой ядра AuthType определяется тип аутентификации - Basic (имя и пароль передаются по сети в открытом виде, если не прикрыть TLS/SSL) или Digest. Аутентификация производится при каждом запросе, клиентская программа может скрывать это подставляя имя/пароль из кеша для одного и того же домена.

Директива AuthUserFile (DA) модуля auth определяет имя файла с паролями. Файл состоит из строк, содержащих имя пользователя и хешированный пароль (разделяются двоеточием). Директива AuthGroupFile (DA) модуля auth определяет имя файла c описанием групп пользователей. Файл состоит из строк, каждая из которых описывает одну группу. В начале строки указывается имя группы, затем двоеточие, затем список имён пользователей через пробел. Директива AuthAuthoritative (DA) позволяет при неудаче аутентификации передать запрос следующему модулю аутентификации (auth_ldap, auth_mysql), если указать "Off".

Модуль auth_dbm позволяет хранить имена, пароли и списки групп в DBM, что значительно ускоряет работу сервера при большом количестве пользователей в списках. Директива AuthDBMUserFile (DA) определяет имя файла с паролями (ключ - имя пользователя, значение - пароль). Директива AuthDBMGroupFile (DA) определяет имя файла c описанием групп пользователей (ключ - имя пользователя, значение - список групп через запятую). Директива AuthDBMType (DA) позволяет явно задать тип DBM: default, SDBM, GDBM, NDBM, DB. Директива AuthDBMAuthoritative (DA) позволяет при неудаче аутентификации передать запрос следующему модулю аутентификации (auth_ldap, auth_mysql), если указать "Off".

Модуль auth_digest позволяет использовать аутентификацию типа Digest. Директива AuthDigestAlgorithm (DA) определяет вариант алгоритма (MD5 или MD5-sess (недоделан)). Директива AuthDigestFile (DA) определяет имя файла с паролями. Директива AuthDigestGroupFile (DA) определяет имя файла c описанием групп пользователей. Директива AuthDigestDomain (DA) позволяет задать список URI через пробел, которые относятся к одному домену. URI из списка рассматриваются клиентом как префикс в адресном пространстве и используются для оптимизации (очень рекомендуется). Имеется множество директив (недоделанных) по тонкой настройке процесса аутентификации. Может сразу перейти на TLS? Кстати, для обслуживания MS IE требуется следующий хак:

BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On

Предварительно необходимо создать файл паролей в месте, недоступном для извлечения с сайта. Для создания файла используются утилиты htpasswd (аутентификация Basic, текстовые файлы), htdigest (аутентификация Digest, текстовые файлы), htdbm (аутентификация Basic, DBM, в девичестве называлась dbmmanage, так её и сейчас называют в документации). Добавление (изменение, удаление) пользователя в файл:

htpasswd имя-файла-с-паролями имя-пользователя

Ключи:

Вывод созданной записи на stdout вместо записи в файл (можно использовать ключи -d и -m):

htpasswd -n имя-пользователя

Утилита htdigest позволяет добавить пользователя в текстовый файл паролей для аутентификации типа Digest (ключ -c создаёт файл):

htdigest имя-файла-с-паролями realm имя-пользователя

Модули auth_anon, auth_ldap и auth_mysql реализуют дополнительные возможности аутентификации.

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

Модуль access обеспечивает авторизацию доступа на основе IP адреса клиента или других характеристиках запроса (т.е. без аутентификации). Секция Limit позволяет ограничить действие директив авторизации конкретными методами доступа. Директивы:

Директива ядра Satisfy увязывает требования Require и Allow/Deny.

Виртуальные хосты

Один сервер Apache может обслуживать запросы к нескольким сайтам (на одном компьютере можно запустить несколько серверов Apache, если это необходимо по требованиям безопасности - в этом случае можно задать отдельные User/Group). Описание каждого сайта заключается в секцию VirtualHost. Запросы, которые сервер не может соотнести ни с одной секцией VirtualHost, обслуживаются исходя из настроек главного сайта. Привязка сайта к виртуальному хосту может быть на основе IP адреса (возможно определение виртуального хоста со специальным именем "_default_", которое будет "перехватывать" на себя все неприкаянные запросы) или имени (работает только для клиентов, умеющих выдавать заголовок "Host:" в запросе; надеюсь, что других сейчас не осталось; см. также директиву ServerPath). При использовании TLS/SSL нельзя использовать привязку по имени. Внутри секции может быть использована почти любая директива (буква V в описании) или секции DFL. Самая необходимая директива - DocumentRoot, которая задаёт привязку корневого локального URI в каталогу файловой системы. Обычно также используются директивы ServerAdmin, ServerName и задание отдельных журналов.

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

При виртуальном хостинге на основе имени директива NameVirtualHost (в основной секции) привязывает виртуальный хост к указанному адресу/порту: запросы на этот адрес будут распределяться только между соответствующими виртуальными хостами; если NAT или прокси перебрасывает запросы снаружи на другой IP адрес, то в директиве необходимо указать новый адрес. В качестве адреса можно использовать шаблон ("*" или "*:80"). Для приёма запросов необходимо дополнительно использовать директиву Listen. Аргумент секции VirtualHost должен соответствовать аргументу NameVirtualHost. В секции VirtualHost необходимо обязательно указать ServerName и DocumentRoot. Директива ServerAlias позволяет задать дополнительные имена сайта для виртуального хоста.

При получении запроса сервер проверяет соответствует ли входящий адрес и порт упомянутым в директиве NameVirtualHost. Если соответствует, то он перебирает секции VirtualHost, в заголовках которых указан входящий адрес. В них он ищет ту секцию, в которой указана директива ServerName (или ServerAlias), соответствующая заголовку запроса "Host:". Если соответствия не найдено ("_default_" соответствует всегда), то используется первая попавшаяся секция.

Модуль vhost_alias предназначен для организации массового виртульного хостинга.

Отображение URI в имена файлов

При получении запроса сервер прежде всего определяет виртуальный хост, к которому он относится. Соответствующая секция VirtualHost определяет дополнительные параметры. В простейшем случае локальная часть URI дописывается к значению DocumentRoot виртуального хоста, файл с получившимся именем извлекается и передаётся клиенту. Символьные ссылки в каталоге DocumentRoot обрабатываются только, если действуют опции (директива Options) FollowSymLinks или SymLinksIfOwnerMatch.

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

Модуль userdir позволяет определить каталог в домашнем каталоге пользователя, который надо использовать при обработке URL вида http://www.company.ru/~username/ (по умолчанию - public_html). Рекомендуется сделать "UserDir disabled", а затем "UserDir enabled имя-пользователя", чтобы разрешить сайт только одному пользователю, а не всем подряд, включая root (а лучше не включать этот модуль в сборку).

Модуль alias позволяет отображать URL в различные части файловой системы и перенаправлять запросы (директивы модуля alias обрабатываются после Location, но до Directory; директивы Redirect обрабатываются по очереди раньше директив Alias, которые также обрабатываются последовательно до первого совпадения):

Модуль dir обеспечивает отображение имени каталога, указанного в URL, в запрос индексного файла:

Модуль speling пытается скорректировать очепатки в URL (директива SVDFLA CheckSpelling Off|On): ошибки с прописными/строчными буквами, пропуск одного символа, вставка одного символа, перестановка 2 символов, замена одного символа). Предполагаемое правильное имя (список имён) возвращается в виде сообщения перенаправления.

Модуль rewrite.

MIME типы, обработчики и фильтры

Модуль mime ассоциирует суффикс (можно указывать с точкой или без, прописные и строчные буквы не различаются) имени файла с обработчиками, фильтрами и типом содержимого (MIME тип, язык, набор символов и метод кодирования). Допустимые MIME типы определяются IANA. Если имя файла имеет несколько суффиксов, то обычно MIME тип определяется по самому правому, а язык и кодировка по совокупности. Метод кодирования (например: сжатие (x-gzip, gzip, x-compress, compress), шифровка, uuencode) рассматривается как модификатор типа, вызывает посылку заголовка "Content-encoding:", чтобы подготовить клиента к декодированию. В запросах воспринимаются как методы кодирования x-gzip (старые клиенты), так и gzip (новый стандарт). В ответах сервер старается соответствовать стилю клиента. Сервер посылает в ответе информацию о языке (Content-Language:, двухсимвольный код) и наборе символов (дополнение charset= в заголовке Content-Type:). Допустимые наборы символов определяются IANA (US-ASCII, ISO-8859-1, ISO-10646-UTF-1, KOI8-R, UTF-7, UTF-8, windows-1251). Данные полученные от клиента могут быть пропущены через последовательность входных фильтров, данные перед передачей клиенту могут быть пропущены через последовательность выходных фильтров. Для использования доступны фильтры модулей include (SSI), deflate и ext_filter. Большинство запросов обслуживается встроенными обработчиками, в зависимости от типа содержимого. Имеется возможность привязывать специальные обработчики в зависимости от типа, имени или расположения ресурса:

Директивы ядра позволяют назначать всем ресурсам, описанным в секции (DFLA) MIME тип (ForceType), входной фильтр (SetInputFilter), выходной фильтр (SetOutputFilter), обработчик (SetHandler). Директива DefaultType назначает MIME тип по умолчанию. Директива AddOutputFilterByType назначает выходной фильтр в соответствии с указанным MIME типом. Директива AddDefaultCharset определяет будет ли информация о наборе символов добавляться к заголовку ответа.

Директивы модуля mime:

Модуль mime_magic определяет MIME тип по содержимому файла, аналогично программе file(1). Директива MimeMagicFile (SV) определяет имя файла описаний. С дистрибутивом поставляется файл conf/magic, но его необходимо указать явно.

Модуль deflate реализует выходной фильтр DEFLATE - сжатие результатов перед посылкой клиенту и рассжатие запросов (алгоритм gzip, zlib). Работает после SSI и PHP. Включается директивами SetInputFilter, SetOutputFilter, AddOutputFilterByType. Для работы кеширующих прокси необходимо позаботиться о добавлении правильного заголовка Vary (добавление чрезмерно правильного заголовка: Header set Vary *). Директивы:

Модуль ext_filter позволяет использовать внешнюю программу в качестве выходного фильтра (ответ сервера поступает на stdin, результат работы программы считывается с stdout). Описанные фильтры используются в директиве SetOutputFilter. Директивы:

Модуль include реализует выходной фильтр SSI и описан в отдельном документе.

Обработчик server-info (модуль info; директива AddModuleInfo позволяет добавить комментарий к описанию модуля) выдаёт информацию о конфигурации сервера (выводится текущее состояние файла настройки, а не на момент запуска сервера) и обычно используется так (http://www.company.ru/server-info):

<Location /server-info>
  SetHandler server-info
  Order deny,allow
  Deny from all
  Allow from свой-компьютер
</Location>

Обработчик server-status (модуль status) выдаёт информацию о текущем состоянии сервера и статистику о его загруженности, а также список последних обработанных запросов. Конфигурируется аналогично обработчику server-info (запросы вида: http://www.company.ru/server-status?refresh=секунд или http://www.company.ru/server-status?auto). Директива ExtendedStatus (S) позволяет собирать расширенную статистику.

Обработчик send-as-is (модуль asis) позволяет обрабатывать файлы, которые содержат часть заголовков ответа в себе (сервер добавляет заголовки Date: и Server:). Кроме явного указания обрабатываемых файлов с помощью AddHandler и SetHandler, также обрабатывает файлы с MIME типом httpd/send-as-is. В начале файла должны быть заголовки ответа (обязательно Status: и Content-type:), которые отделяются от тела ответа пустой строкой.

Модуль negotiation позволяет серверу выбрать одно из возможных представлений ресурса для передачи клиенту на основе пожеланий каждого клиента (тип, язык, набор символов, метод кодирования) явно с помощью обработчика type-map (*.var, application/x-type-map) или неявно при включении Options MultiViews. Например, пожелания моего Firefox 1.0.3:

ACCEPT: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
ACCEPT_CHARSET: KOI8-R,utf-8;q=0.7,*;q=0.7
ACCEPT_ENCODING: gzip,deflate
ACCEPT_LANGUAGE: ru,en-us;q=0.7,en;q=0.3

Входной файл для обработчика type-map содержит описания документов, каждая секция (вариант) может содержать метод кодирования, язык, длину, MIME тип с параметрами (level, qs), тело варианта или локальный URI с телом варианта. Механизм MultiViews позволяет выбрать из имеющихся файлов, имена которых начинаются с локальной части URI, наиболее подходящий на основе типа, языка, набора символов и метода кодирования, определяемых модулем mime по суффиксам файлов. Директивы:

Обработчик cgi-script (модули cgi или cgid в зависимости от MPM) обрабатывает файлы с MIME-типом application/x-httpd-cgi или которым явно назначен обработчик cgi-script (рекомендуется использование ScriptAlias, XBitHack). В дополнение к переменным окружения, положенным по стандарту CGI, устанавливаются переменные DOCUMENT_ROOT, PATH_INFO ("лишняя" часть URL, см. AcceptPathInfo), REMOTE_HOST (требуется HostnameLookups), REMOTE_IDENT, REMOTE_USER (только после аутентификации). Директивы:

Модуль suexec в сочетании с утилитой suexec позволяет запускать CGI программы под uid и gid, указанным в директиве SuexecUserGroup (SV).

Модуль actions позволяет привязать CGI скрипт к обработчику, MIME типу или методу запроса (GET, PUT и т.д.). Директивы:

Преобразование содержимого документов и заголовков

Модуль charset_lite является подмножеством (очень небольшим) модуля charset, сделанного для Russian Apache. К сожалению, переноса модуля charset из Apache в Apache 2 не предвидится. При перекодировке используется библиотека iconv(3) и имена кодовых таблиц должны соответствовать, принятым в ней, а не какому-то стандарту. Проверить допустимость перекодировки можно с помощью программы iconv:

iconv -f исходная-кодировка -t требуемая-кодировка

Директивы charset_lite:

Модуль expires управляет содержимым заголовков Expires и Cache-Control (max-age) в ответах сервера. Эти заголовки используются при кешировании клиентом и промежуточными прокси. Директивы:

Модуль headers позволяет удалять и заменять заголовки запросов и ответов. Директивы:

Отслеживание запросов и клиентов

Модуль unique_id обеспечивает переменную UNIQUE_ID с уникальным идентификатором для каждого запроса в кластере серверов (требуется синхронизация по NTP и уникальные IP адреса).

Модуль usertrack позволяет отслеживать клиентов с помощью куки. Значение куки записывается в журнал с помощью спецификатора формата "%{cookie}n". Директивы:

Автоматическое создание индекса каталога

Модуль autoindex позволяет автоматически создавать индекс каталога из списка находящихся в каталоге файлов, если отсутствует индекс, сделанный вручную (задаётся модулем dir). Действие модуля включается флагом Indexes директивы Option. Директивы модуля:

DAV (WebDAV)

Модули dav и dav_fs обеспечивают расширение протокола HTTP Web-based Distributed Authoring and Versioning (WebDAV, DeltaV, RFC 2518, RFC 3253) класса 1 и 2; протокол позволяет создавать, копировать, перемещать и удалять ресурсы (файлы) и коллекции (каталоги) ресурсов; обеспечивает синхронизацию нескольких редакторов; методы: GET, PUT, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, OPTIONS (можно выборочно разрешать и запрещать с помощью Limit и LimitExcept; например, только чтение: LimitExcept GET POST OPTIONS PROPFIND; управление версиями и ACL не реализованы; настоятельно требуется аутентификация клиентов - Digest или Basic поверх SSL; сервер должен иметь права записи на требуемые файлы и каталоги (/var/lib/dav/, /usr/local/apache-2.0.55/var); файлы создаются с правами "rw-r--r--" и владельцем apache:apache; создаётся каталог .DAV, который хранит свойства документов; директивы модуля dav (при сборке требуется --enable-dav):

Директивы модуля dav_fs (метод хранения filesystem для модуля dav; при сборке требуется --enable-dav):

Пример:

    DavLockDB var/DavLockDB
    Alias /exchange /usr/local/apache2/exchange
    <Location /exchange>
      Dav filesystem
    </Location>

Использование веб-папок (web folders) в MS Windows XP: требуется IE 5.0 или новее с установленным компонентом поддержки веб-папок (MS 2003 его не имеет по умолчанию!); необходимо зайти в "сетевое окружение", и нажать "добавить новый элемент в сетевое окружение"; после запуска мастера нажать "выберите другое сетевое размещение" и в качестве адреса указать "https://имя-сервера:80/имя-папки", дать имя и завершить создание элемента сетевого окружения. Должна быть запущена служба Веб-клиент (Web-Folders). Желательно установить update KB907306. Можно также при запуске Internet Explorer выбрать из меню "файл->открыть", в качестве имени указать https://имя-сервера:80/имя-папки и поставить галочку "открыть как веб-папку" (при этом создаётся элемент сетевого окружения). Явное указание имени порта блокирует ошибочное перенаправление, http:// рассматривается MS Vista как небезопасное и блокируется.

Многие программы MS Office и Adobe позволяют открывать и сохранять файлы на WebDAV сервере с использованием созданного ранее элемента сетевого окружения.

Имеется проблема с русскими буквами в именах ресурсов и коллекций (имена коллекций в UTF8, а имена ресурсов в cp1251?).

Для Firefox имеется расширение webfolder.

В httpd.conf обязательно должна быть строка

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully

Записи в журнале по поводу "_vti_inf/shtml.exe" и т.д. являются результатом поиска клиентом расширения FrontPage, если клиент умеет работать по протоколу DAV, то их можно игнорировать.

Для подключения консольного DAV клиента cadaver к серверу, требующему SSL сертификат клиента, необходимо записать в файл ~/.cadaverrc строку, указывающую на сертификат в формате P12:

set client-cert имя-файла.p12

Утилита mount.davfs (пакет davfs2) позволяет смонтировать веб папку как файловую систему (mount -t davfs), работает в пространстве пользователя (FUSE), конфигурационный файл - /etc/davfs2/davfs2.conf или ~/.davfs2/davfs2.conf.

Файловые менеджеры GNOME Nautilus (схема dav://, gvfs, пытается зайти в корень сайта) и KDE Konqueror (указать схему webdav://) позволяют просматривать WebDAV каталоги.

Клиенты и сервера DAV (как впихнуть клиентский сертификат в nautilus или kde я не понял).

Модуль mod_dav. Введение в WebDAV

SSL

Модуль ssl обеспечивает шифрование по протоколу SSL/TLS. Требует наличия OpenSSL и (понимания механизма действия). Кстати, виртуальный хостинг с привязкой по имени невозможен (в момент установления SSL соединения заголовок Host: ещё не получен), так что каждый виртуальный сервер требует отдельного IP адреса (или использования нестандартного порта). Директивы:

Переменные окружения (записываются в журнал в виде: "%{SSL_PROTOCOL}x"):

Тестирование (сертификат должен иметь: "Purposes: Client,Sign"):

openssl s_client -connect www.company.ru:443 -CAfile связка-корневых-сертификатов \
  -cert мой-сертификат -key частный-ключ

httpd

httpd - собственно сервер (сигнал HUP - заново прочесть конфигурацию, TERM - завершить свою работу и всех сыновей, USR1 - мягкий перезапуск; сигнал надо послать тому процессу, pid которого указан в PidFile, обычно /usr/local/apache2/logs/httpd.pid):

apachectl - управление сервером

Команды:

Опции ./configure

Полный список опций можно получить командами:

./configure --help
./configure --help=recursive

Интересные опции:

Установка 2.0.53 (2.0.54, 2.0.55, 2.0.58, 2.0.59, 2.0.61, 2.0.63) на CentOS 4.0/4.4/4.5/5.0/5.1 (x86 и x86_64)

Отличия версий

Ссылки

@ Карта сайта News Автора!

Bog BOS: Apache 2: HTTP сервер. Установка, настройка

apache inn MySQL nntpcache Cyrus IMAP exim Squid ssh syslog tacacs ProFTPD wu-ftpd xntpd

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru