Настройка сервера осуществляется с помощью текстового файла httpd.conf
(при сборке по умолчанию - /usr/local/apache2/conf/httpd.conf), состоящего из директив.
Имя файла можно изменить при запуске сервера ключом "-f". Директива Include
позволяет вставлять содержимое дополнительных файлов (можно указывать
шаблон имени или имя каталога). Для вступления в действие
изменений файла настройки необходимо перезапустить сервер. Некоторые директивы
могут ссылаться на дополнительные файлы с другим синтаксисом.
Каждая директива располагается на отдельной строке. Продолжение на следующую
строку делается с помощью символа '\' в конце строки. Комментарии начинаются
с символа '#'. Пробелы в начале строки игнорируются.
Сервер состоит из множества
модулей, которые могут выбираться при сборке или загружаться динамически.
Модуль Core отключить нельзя.
Каждая директива определяет поведение одного из модулей и имеет
смысл только, если этот модуль включен при сборке или с помощью динамической загрузки.
Директивы могут выполняться в зависимости от наличия модуля (секция IfModule)
или установки параметра при запуске сервера (секция IfDefine).
Секция IfDefine включает директивы, применяемые только
если при запуске сервера была установлена (не установлена) соответствующая
переменная (ключ -D):
<IfDefine [!]имя-переменной>
...
</IfDefine>
Секция IfModule включает директивы, применяемые только
при наличии (отсутствии) указанного модуля:
<IfModule [!]имя-модуля>
...
</IfModule>
Директивы могут иметь следующие области действия (секции могут быть вложенными,
каждая директива имеет набор допустимых контекстов - буквы SVDFLA указываются
при описании директив):
весь сервер (S)
секция VirtualHost (V)
секции Directory и DirectoryMatch (D)
секции Files и FilesMatch (F)
секции Location и LocationMatch (L)
дополнительный файл настройки размещается в составляющем содержимое сайта каталоге,
директивы из него действуют на этот каталог и его подкаталоги (A)
Дополнительные файлы настройки читаются при каждом запросе
из каталога и его надкаталогов (сверху вниз, следующий имеет больший приоритет).
Обычно имеют имя файла ".htaccess".
Директива AccessFileName (SV) позволяет задать другое имя файла
или имена (через пробел).
Директива AllowOverride (D, кроме DirectoryMatch)
позволяет определить типы директив, допустимых в дополнительном файле настройки
(директива также должна быть вообще допустима в контексте A):
All (по умолчанию)
None (дополнительные файлы даже не читаются, что сильно ускоряет работу сервера)
тип [ тип ... ]
AuthConfig (директивы авторизации)
FileInfo (директивы, управляющие типом обработки документа - AddHandler и т.д.)
Секция VirtualHost (S) включает директивы, применяемые
для запросов к указанному хосту ("*" означает любой адрес или любой порт;
"_default_" - адреса, не указанные в других секциях):
Секция Directory (SV) включает директивы, применяемые только к
запросам файлов из указанного в заголовке секции каталога и его подкаталогов
(вместо полного имени каталога можно указывать шаблон в стиле Unix (?*[]) или
регулярное выражение в кавычках, перед которым необходимо указать строку "~ "),
нельзя вкладывать в секции Directory и Limit:
<Directory имя-каталога>
...
</Directory>
Секция DirectoryMatch (SV) включает директивы, применяемые только к
запросам файлов из указанного в заголовке секции каталога и его подкаталогов,
нельзя вкладывать в секции Directory и Limit:
Секция Files (SVDA) включает директивы, применяемые только к
запросам файлов с указанным в заголовке секции простым именем
(вместо простого имени можно указывать шаблон в стиле Unix (?*[]) или
регулярное выражение в кавычках, перед которым необходимо указать строку "~ "):
<Files простое-имя-файла>
...
</Files>
Секция FilesMatch (SVDA) включает директивы, применяемые только к
запросам указанного в заголовке секции файла:
Секция Location (SV) включает директивы, применяемые только к
запросам URL, указанным в заголовке секции
(для локальных - не прокси - запросов нельзя указывать схему, имя хоста,
номер порта и строку запроса; можно указывать шаблон в стиле Unix (?*[]) или
регулярное выражение в кавычках, перед которым необходимо указать строку "~ ")
<Location начальная-часть-URL>
...
</Location>
Секция LocationMatch (SV) включает директивы, применяемые только к
запросам URL, указанным в заголовке секции:
Секция 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 применяются после соответствующих общих секций):
секция Directory (кроме регулярных выражений) и .htaccess (.htaccess
перебивает Directory, если разрешено директивой AllowOverride)
секция DirectoryMatch и Directory с регулярными выражениями
Общие характеристики сервера или виртуального сервера:
SV AllowEncodedSlashesoff | on (разрешать принимать запросы
с URL, в состав которых входит закодированный '/' или '\' (%2F или %5C);
декодирование не производится в любом случае)
SV DocumentRootпуть (определяет, где находится корень
документов сервера или виртуального сервера; добавляется к локальной части
URL или к относительному имени файла для образования абсолютного имени файла)
SV ErrorLogимя-файла | syslog:facility
(logs/error_log; куда выдавать сообщения об ошибках; если имя файла начинается
с символа '|', то это программа обработки)
SVD HostNameLookupsoff | on | double
(определять ли имя клиента по его IP-адресу; double -
сначала делается обратный, затем прямо запрос к DNS, результат сравниваются)
SVD IdentityCheckoff | on (запрашивать identd (RFC 1413)
на клиентском компьютере для идентификации клиента)
SV KeepAliveon | off (обслуживать несколько запросов, не
прерывая TCP-соединения с клиентом)
SV KeepAliveTimeoutсекунд (15)
SV LimitInternalRecursionчисло [число]
(10; ограничение числа внутренних перенаправлений и подзапросов)
S LimitRequestFieldsчисло (100; максимальное число
полей в заголовке запроса)
S LimitRequestFieldsizeбайт (8190; максимальный размер
поля заголовка)
S LimitRequestLineбайт (8190; максимальная длина
строки запроса - метод, URI, версия)
SV LogLevelemerg | alert | crit | error
| warn | notice | info | debug
(warn; сообщения какого уровня серьёзности записывать в журнал ошибок)
S MaxKeepAliveRequestsмаксимальное-число-запросов-при-keep-alive (100)
S NameVirtualHostaddr[:port]
(привязывает виртуальный хост к данному адресу/порту: запросы на этот адрес будут
распределяться только между этими виртуальными хостами; если NAT или прокси
перебрасывает запросы снаружи на другой IP адрес, то здесь необходимо
указать новый адрес)
SV ServerAdminemail-address
V ServerAliasдополнительное-имя-хоста ...
(задаёт альтернативные имена для виртуального хоста в дополнение к ServerName)
SV ServerNameполное-доменое-имя[:порт]
(используется для redirect; в секции виртуального хоста определяет
значение поля "Host:" для обслуживаемых запросов)
V ServerPathпуть (все запросы, URI которых
начинаются с путь будут обслуживаться этим
виртуальным сервером; адрес и порт должны соответствовать тоже;
необходим для устаревших клиентов, не умеющих указывать заголовок "Host:")
S ServerRootполное-имя-директории
(задаёт место, где лежат все файлы сервера; отсюда отсчитываются
относительные имена файлов)
S ServerTokensMajor | Minor | Minimal | ProductOnly | OS | Full
(Full; что сервер сообщает о себе в заголовке "Server:", примерный текст:
ProductOnly - Server: Apache
Major - Server: Apache/2
Minor - Server: Apache/2.0
Minimal - Server: Apache/2.0.42
OS - Server: Apache/2.0.42 (Unix)
Full - Server: Apache/2.0.42 (Unix) PHP/3.0 MyMod/1.2
S TimeOutсекунд (300)
SVD UseCanonicalNameon | off|DNS
(как сервер определяет своё имя;
используется при генерации URL, ссылающихся на этот же сервер:
On - использовать имя, определенное в ServerName
Off - использовать параметры из запроса пользователя
DNS - для устаревших клиентов, не обеспечивающих заголовок Host:
Ограничения на потребление ресурсов и оптимизация:
SVDFLA EnableMMAPon | off (использовать mmap();
для файлов, хранящихся в файловых системах NFS и SMB лучше отключить)
SVDFLA EnableSendfileon | off
(использовать sendfile(); для файлов, хранящихся в файловых
системах NFS и SMB лучше отключить)
SVDFLA LimitRequestBodyбайт (0, т.е. бесконечность)
SVDFLA LimitXMLRequestBodyбайт (1000000)
SVDFLA RLimitCPUsoft-limit max-resource-limit
(задает максимальное число секунд CPU для работы CGI процессов;
оба параметра могут быть числом или словом max)
SVDFLA RlimitMEMsoft-limit max-resource-limit
(задает максимальное число байт, которое может использовать CGI процесс;
оба параметра могут быть числом или словом max)
SVDFLA RlimitNPROCsoft-limit max-resource-limit
(задает максимальное число процессов, которое может запустить CGI процесс;
оба параметра могут быть числом или словом max)
Вариации протокола взаимодействия с клиентами и путь обработки
запроса:
SVDFLA AcceptPathInfoDefault | On | Off
(что делать с запросами, URI которых содержит "лишние" символы в конце:
Off - возвращать код 404
On - выдавать файл, имя которого совпадает с началом пути в URI
Default - в зависимости от обработчика: обработчик обычных файлов
возвращает код 404, обработчики скриптов принимают запрос
SVDFLA AddDefaultCharsetOff | On | имя-кодировки
(для ответов типа text/plain и text/html добавлять заголовок с указанием
кодировки; on - iso-8859-1)
SVDFLA AddOutputFilterByTypeфильтр[;...]
MIME-тип ...
(направляет ответ на запрос на вход исходящего фильтра в зависимости
от MIME-типа:
SVDFLA ContentDigestOff | On
(включать в ответ заголовок Content-MD5:)
SVDFLA DefaultTypeMIME-тип (text/plain)
SVDFLA ErrorDocumentкод-ошибкидокумент
(какое сообщение выдавать в случае указанной ошибки;
MSIE заменяет короткие (менее 512 байт) сообщения отсебятиной;
описывается так:
default
"текст сообщения"
/локальный-URI-путь (в т.ч. скрипт)
http://имя-сайта...
SVDFLA FileETagатрибут-файла ...
(какие атрибуты файла использовать для генерации заголовка ответа "ETag:"
(используется при кешировании) - INode, MTime, Size, All, None;
перед именем атрибута могут стоять управляющие символы '+' и '-')
DFLA ForceTypeMIME-тип | None
(назначать всем ответам указанный MIME-тип)
SVDFLA Options [+ | -]опция ...
(All; какие опции сервера доступны для данной директории:
None
All (кроме MultiViews)
ExecCGI - разрешается выполнение CGI
FollowSymLinks - ходить по символьным ссылкам (игнорируется
в секции Location; при сравнении используется исходное имя)
Includes - использовать SSI
IncludesNOEXEC - использовать SSI, кроме exec и include CGI
Indexes - генерировать листинг директории, если отсутствует файл index.html
MultiViews - определять представление ресурса в зависимости от
предпочтений клиента (тип носителя, язык, набор символов
кодировка) (не надо это включать)
SymLinksIfOwnerMatch - следовать по символьным ссылкам, только если
владелец целевого файла совпадает c владельцем ссылки (игнорируется
в секции Location)
SVDFLA ServerSignatureOff | On | EMail
(позволяет дописывать информацию о сервере в конец сгенерированных
документов: сообщения об ошибках, индекс каталога и т.п.)
SVDFLA SetHandlerимя-обработчика | None
(установить обработчик файла вне зависмости от суффикса или MIME-типа)
SVDFLA SetInputFilterфильтр[;...]
(запрос пропускается через указанные фильтры)
SVDFLA SetOutputFilterфильтр[;...]
(ответ пропускается через указанные фильтры)
Аутентификация и авторизация:
DFLA AuthNameдомен-авторизации (какой домен - realm -
авторизации клиент должен использовать при аутентификации;
выдаётся на экран при запросе имени и пароля)
DFLA AuthTypeBasic | Digest
DFLA Requireтипимя [имя ...]
(какой аутентифицированный пользователь может иметь доступ:
user {имя-пользователя} (только
пользователи с данными именами)
group {имя-группы} (только
пользователи из данной группы)
DFLA SatisfyAll | Any
(если одновременно используются методы авторизации Allow и Require,
то требовать авторизации по обоим критериям или любому из них)
В отличие от первой версии Apache 2 может использовать
различные модули управления процессами (MPM). Сервер может быть собран только
с одним MPM. MPM осуществляет запуск процессов, потоков и привязку запросов
клиентов к процессу или потоку. Область действия всех директив, кроме AssignUserID -
сервер. Типы MPM:
prefork - MPM с ветвлением (как в Apache 1.3); никаких потоков, каждому
запросу выделяется отдельный процесс, процессы порождаются заранее
и используются при обработке последовательных запросов;
директивы:
MinSpareServers число (5; минимальное число запасных процессов; недостающие
процессы создаются с темпом 1 штука в секунду)
MaxSpareServers число (10; максимальное число запасных процессов; лишние
процессы завершаются)
worker - гибридный MPM: запускается множество процессов, каждый из которых имеет
множество обслуживающих потоков; директивы:
ThreadsPerChild число (25; число потоков на каждый обслуживающий процесс;
создаются при запуске процесса, число потоков никогда не меняется)
leader - экспериментальный вариант MPM worker (--with-mpm=leader и
--enable-nonportable-atomics=yes)
threadpool - экспериментальный вариант MPM worker
perchild - MPM с фиксированным количеством процессов, процессы запускаются
с различными полномочиями и могут обслуживать указанное количество
потоков; объявлен разработчиками как неработающий; директивы:
NumServers число-процессов
ChildPerUserID uidgid число-процессов
AssignUserID uidgid (используется при описании виртуального сервера)
StartThreads число (5 штук на процесс для perchild,
сколько обслуживающих потоков запускать в начале работы)
MaxThreadsPerChild число (64)
Общие директивы:
Listen [IP-адрес:]порт (обслуживаемый адрес (по умолчанию - все интерфейсы) и порт;
можно использовать несколько раз)
ServerLimit число (256 для prefork, 8 для perchild, 16 для других гибридных MPM;
максимальное число процессов; нельзя изменить при перезапуске)
ThreadLimit число (64; максимальное число потоков на процессов;
нельзя изменить при перезапуске)
MaxClients число (256 для prefork, ServerLimit*ThreadsPerChild для гибридных MPM;
максимально возможное число одновременно обслуживаемых клиентов;
остальные запросы ставятся в очередь до ListenBacklog штук)
ListenBacklog число (511; размер очереди запросов, ожидающих обслуживающего
процесса или потока)
MaxRequestsPerChild число (10000; после обслуживания указанного числа соединений
процесс завершается - на всякий случай; 0 означает бесконечность)
User uid (-1; идентификатор пользователя в смысле Unix, с правами которого
будут запускаться обслуживающие процессы)
Group gid (-1; идентификатор группы в смысле Unix, с правами которой
будут запускаться обслуживающие процессы)
MaxMemFree КБ (0, т.е. бесконечность; сколько неиспользуемой памяти можно
удерживать, не выдавая free())
AcceptMutex метод (Default - определяется при сборке;
метод раздачи запросов по обслуживающим процессам:
flock, fcntl, posixsem, pthread, sysvsem)
LockFile имя-файла (logs/accept.lock; файл, используемый в методах fcntl и flock;
нельзя располагать на NFS разделе)
StartServers число (5 для prefork, 3 для гибридных MPM;
сколько обслуживающих процессов запускать в начале работы)
MaxSpareThreads число (10 штук на процесс для perchild,
250 штук на весь сервер для worker и его производных (при избытке закрываются
процессы целиком);
для гибридных MPM определяет максимальное число запасных обслуживающих потоков)
MinSpareThreads число (5 штук на процесс для perchild,
75 штук на весь сервер для worker и его производных (при недостатке создаются новые
процессы, а не потоки);
для гибридных MPM определяет минимальное число запасных обслуживающих потоков)
SendBufferSize байт (0, т.е. определяется ОС; размер буфера TCP)
CoreDumpDirectory каталог
PidFile имя-файла (logs/httpd.pid; указанному процессу надо посылать SIGHUP
для повторного чтения конфигурационного файла)
ScoreBoardFile имя-файла (logs/apache_status; в этом файле хранится информация
для координации работы процессов сервера; если его не указать, то синхронизация
производится через разделяемую память, т.е. значительно быстрее)
EnableExceptionHook On|Off (Off; требуется ключ --enable-exception-hook при сборке;
позволяет подключать обработчик аварийных завершений (mod_whatkilledus или
mod_backtrace) сервера)
asis (обработчик send-as-is позволяет обрабатывать файлы,
которые содержат часть заголовков ответа в себе)
auth (аутентификация Basic, построенная на текстовых файлах)
autoindex (в отсутствии сделанного вручную индексного файла каталога
(задаётся модулем dir)
создаёт его "на ходу" из списка находящихся в каталоге файлов)
cgi (обработчик CGI; устанавливается по умолчанию для prefork MPM)
cgid (обработчик CGI; устанавливается по умолчанию для гибридных MPM)
dir (отображение имени каталога, указанного в URL,
в запрос индексного файла)
imap (обработка графических карт сервером: клиенту выдаётся изображение меню
и когда он кликает на точку внутри изображения, сервер получает координаты
точки; карта описывает области изображения и соответствующие им
действия сервера)
mime (ассоциация файла по суффиксу имени с его обработкой
(обработчики и фильтры) и типом содержимого (MIME тип, язык, набор символов и кодировка))
negotiation (позволяет серверу выбрать один из возможных документов
для обслуживания клиента на основе характеристик каждого клиента)
setenvif (позволяет устанавливать переменные окружения
в зависимости от характеристик запроса)
status (выдача информации о текущем состоянии сервера)
userdir (директива UserDir позволяет определить каталог в домашнем
каталоге пользователя, который надо использовать при обработке URL
вида http://www.company.ru/~username/; по умолчанию - public_html;
рекомендуется сделать "UserDir disabled",
а затем "UserDir enabled имя-пользователя", чтобы разрешить сайт только одному
пользователю, а не всем подряд, включая root)
cern_meta (позволяет добавлять заголовки в ответ;
для каждого файла создаётся отдельный файл с дополнительными
заголовками; MetaDir, MetaFiles, MetaSuffix)
log_forensic (записывает в отдельный журнал полные заголовки каждого запроса
для отладки тяжёлых случаев)
logio (считает входящие и исходящие байты для каждого запроса (и заголовки, и тела;
до TLS/SSL дешифровки на входе и после - на выходе), что позволяет использовать
форматы %I и %O в модуле log_config)
mime_magic (определяет MIME тип по содержимому файла,
аналогично программе file(1))
proxy (позволяет Apache работать как прокси-сервер; для обслуживания
протокола FTP требуется модуль proxy_ftp, HTTP - proxy_http,
CONNECT/SSL - proxy_connect и ssl; для кеширования может использоваться
модуль cache; может работать в режиме прямого (ProxyRequests)
и обратного (ProxyPass, RewriteRule) прокси
(балансировка загрузки, кеширование, обход экрана или слияние адресных
пространств нескольких серверов))
proxy_connect (вспомогательный модуль для модуля proxy)
proxy_ftp (вспомогательный модуль для модуля proxy)
proxy_http (вспомогательный модуль для модуля proxy)
rewrite (более мощное средство преобразования URL, чем alias)
so (загрузка дополнительных модулей при запуске и перезапуске сервера
вместо пересборки сервера - DSO, .so, LoadModule, LoadFile)
vhost_alias (организация массового виртульного хостинга, имя из
заголовка запроса "Host:" используется для определения каталога,
из которого брать файлы; VirtualDocumentRoot, VirtualDocumentRootIP,
VirtualScriptAlias, VirtualScriptAliasIP)
Экспериментальные модули необходимо добавить явно при сборке apache:
auth_digest (аутентификация Digest, построенная на текстовых файлах)
auth_ldap (BASIC аутентификация с использованием LDAP)
cache (кеширование местного или внешнего содержимого и доступ по ключу;
требует по крайней мере одного модуля хранения)
charset_lite
(перекодировка документов из кодировки хранения в кодировку клиента)
disk_cache (модуль хранения для модуля cache)
dumpio
(записывать все входящие сообщения после декодирования SSL (DumpIOInput On)
и/или все выходящие сообщения до кодирования SSL (DumpIOOutput On)
в журнал ошибок)
Сервер позволяет обмениваться информацией с внешними
программами (CGI) и между модулями с помощью переменных окружения.
Имя пременной должно начинаться с буквы и может содержать буквы, цифры
и подчёркивания.
Перед вызовом CGI сервер устанавливает переменные запроса в соответствии со
стандартом (и кое что от себя, некоторые модуля добавляют свои переменные):
PATH="директории, в которых ищутся исполняемые программы"
QUERY_STRING=""
REMOTE_ADDR="клиент или прокси"
REMOTE_PORT="39885"
REQUEST_METHOD="GET"
REQUEST_URI="/cgi-bin/printenv"
SCRIPT_FILENAME=абсолютное имя файла"
SCRIPT_NAME="логическое имя объекта"
SERVER_ADDR="IP адрес"
SERVER_ADMIN="почтовый адрес администратора сервера"
SERVER_NAME="имя-определенное-по-IP"
SERVER_PORT="80"
SERVER_PROTOCOL="HTTP/1.0"
SERVER_SIGNATURE="Apache/1.3.12 Server at dual.deol.ru Port
80\n"
SERVER_SOFTWARE="Apache/1.3.12 (Unix) rus/PL29.4"
Директивы модуля env:
SVDFLA PassEnv имя-переменной ... (передаёт значение системной -
установливается в момент запуска сервера - переменной окружения)
SVDFLA SetEnv имя-переменнойзначение
SVDFLA UnsetEnv имя-переменной ...
Модуль setenvif позволяет устанавливать переменные
в зависимости от характеристик запроса (директивы выполлняются последовательно):
SVDFLA BrowserMatch регулярное-выражение[!]имя-переменной[=значение] ...
(установить переменную (в 1) или присвоить значение или удалить переменную
в зависимости от заголовка запроса "User-Agent:")
BrowserMatchNoCase - сравнение без учёта регистра символов
SVDFLA SetEnvIf имя-атрибутарегулярное-выражение[!]имя-переменной[=значение] ...
(установить переменную (в 1) или присвоить значение (может содержать $1-$9
как значения подвыражения, см. PCRE) или удалить переменную
в зависимости от значения атрибута:
имя поля заголовка запроса (например: Host, User-Agent, Referer,
Accept-Language и др.), вместо имени поля можно указывать
регулярное выражение
Remote_Host
Remote_Addr
Server_Addr
Request_Method (GET, POST и т.д.)
Request_Protocol ("HTTP/0.9", "HTTP/1.1" и т.д.)
Request_URI
имя переменной окружения, установленной предыдущими директивами
SetEnvIf[NoCase]
SetEnvIfNoCase - сравнение без учёта регистра символов
Директива RewriteRule модуля rewrite имеет опцию установки
переменной окружения.
Модуль unique_id уставливает "уникальное" для каждого
запроса значение в переменную UNIQUE_ID.
Использование переменных в модулях:
модуль include (SSI)
позволяет выводить значения переменных командой echo
и использовать их для условного исполнения
модуль access позволяет управлять доступом,
основываясь на значениях переменных
модуль log_config позволяет заносить значения
переменных в журнал и принимать решения о записи вообще
модуль header позволяет добавлять
поля в заголовок ответа, основываясь на значениях переменных
модуль mod_ext_filter может активировать внешний фильтр,
основываясь на значениях переменных
модуль rewrite может использовать различные варианты,
основываясь на значениях переменных
Специальные переменные окружения, меняющие
обработку запроса сервером:
downgrade-1.0 (обрабатывать запрос в соответствии с протоколом HTTP/1.0)
force-no-vary (не вставлять поле Vary в заголовок ответа)
force-response-1.0 (выдавать ответ в формате HTTP/1.0)
gzip-only-text/html (запретить использование модуля deflate для всех типов
содержимого, кроме text/html)
no-gzip (запретить использование модуля deflate для всех типов)
nokeepalive
prefer-language (модуль negotiation выбирает вариант, основываясь на
этикетке языка, указанной в запросе)
redirect-carefully (для доступа DAV Microsoft WebFolders)
suppress-error-charset (сопроводительный текст перенаправления
не помечается как ISO-8859-1)
Журнал ошибок управляется директивами ErrorLog и LogLevel
модуля Core. Кроме сообщений сервера сюда направляется
вывод на stderr скриптов CGI, вывод модуля dumpio.
Журнал доступа управляется модулем log_config,
который позволяет задать имя файла и формат вывода. Данный журнал содержит
записи о всех (если не отфильтровано директивой CustomLog) запросах к серверу.
Каждый виртуальный сервер может вести произвольное число журналов в
различных форматах.
Каждый запрос к серверу порождает
строку в журнале, состоящую из элементов (token), разделенных пробелами.
Пустой элемент записывается как символ '-'.
Если элемент содержит пробелы, то он должен заключаться в кавычки
(это надо самому предусмотреть при описании формата).
При описании формата используются литеральные символы, которые
копируются в журнал (можно использовать '\n' и т.п.; кавычки и
обратная косая должны быть прикрыты символом '\')
и директивы, которые начинаются с символа '%'
и завершаются однобуквенным именем директивы. Между ними может стоять
условие в виде списка кодов завершения HTTP через запятую (м.б. предваренных
восклицательным знаком для операции отрицания) - если условие не выполняется,
то вместо элемента записывается минус. Модификаторы перед буквой директивы
позволяют определить (в случае внутреннего перенаправления)
атрибут исходного ('<') или результирующего
('>') запроса будет использоваться при создании строки журнала.
Директива в описании формата замещается соответствующим значением:
%% - '%'
%a - адрес удаленного хоста
%A - локальный адрес
%B - количество посланных байт, кроме HTTP-заголовка
%b - количество посланных байт, кроме HTTP-заголовка (вместо 0 пишется '-')
%t - время в CLF-формате
([day2d/month3l/year4d:hour2l:minute2l:second2lzone], где zone в формате
[+|-]hour2dmin2d)
%{формат}t - время, формат описан в strftime(3)
%T - секунд, прошедших до окончания обслуживания запроса
%u - имя авторизованного пользователя (если статус не равен 401)
%U - запрошенный URL без поисковой части
%v - канонический ServerName
%V - имя сервера в соответствии с значением UseCanonicalName
%X - состояние соединения к моменту завершения ответа
('X' - преждевременный обрыв, '+' - можно использовать повторно,
'-' - необходимо закрыть после завершения обработки запроса)
Директивы модуля log_config (рекомендуется
использовать только LogFormat для определения формата и CustomLog для
создания журнала):
SV CookieLogимя-файла (только для
совместимости со старым модулем mod_cookie; рекомендуется
использовать mod_usertrack и CustomLog)
SV CustomLogимя-файла-или-каналаформат-или-имя-формата[env=[!]имя-переменной]
(вести журнал определенного формата в указанном файле или подать на вход
программе; канал записывается как символ "|", за которым идет имя
запускаемой программы; журнал подается на стандартный ввод программы, которая
запускается с теми же правами, что и httpd (root); формат
определяется директивой LogFormat; env= позволяет заносить в журнал
записи только о тех запросах, которые удовлетворяют условию)
SV LogFormatформат-или-имя-формата
[имя-формата]
(определить формат с указанным именем; по
умолчанию - "%h %l %u %t \"%r\" %>s %b" - так
называемый Common Log Format (CLF))
SV TransferLogимя-файла-или-канала
(аналогично CustomLog, но формат определяется в
предыдущей LogFormat без имени)
Модуль 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 требуется следующий хак:
Предварительно необходимо создать файл паролей в месте,
недоступном для извлечения с сайта. Для создания файла используются утилиты
htpasswd (аутентификация Basic, текстовые файлы), htdigest (аутентификация Digest, текстовые файлы),
htdbm (аутентификация Basic, DBM, в девичестве называлась dbmmanage, так её и сейчас называют
в документации). Добавление (изменение, удаление) пользователя в файл:
htpasswd имя-файла-с-паролями имя-пользователя
Ключи:
-c (создавать файл с паролями)
-d (использовать crypt() вместо хеширования MD5)
-m (использовать хеширование MD5 вместо crypt())
-D (удалить запись из файла)
Вывод созданной записи на stdout вместо записи в файл (можно использовать
ключи -d и -m):
htpasswd -n имя-пользователя
Утилита htdigest позволяет добавить пользователя в текстовый файл
паролей для аутентификации типа Digest (ключ -c создаёт файл):
Модули auth_anon, auth_ldap и auth_mysql реализуют дополнительные
возможности аутентификации.
Директива ядра Require позволяет задать ограничение
доступа к определённой части сайта только указанным аутентифицированным пользователям или
аутентифицированным пользователям из указанной группы или любым аутентифицированным пользователям.
Модуль access обеспечивает авторизацию доступа на основе IP адреса
клиента или других характеристиках запроса (т.е. без аутентификации).
Секция Limit позволяет ограничить действие директив
авторизации конкретными методами доступа. Директивы:
DFLA Orderпорядок
(определяет очередность в которой применяются директивы Allow и Deny)
Deny,Allow - первыми применяются директивы Deny, затем Allow
(начальное состояние - доступ разрешен)
Allow,Deny - первыми применяются директивы Allow, затем Deny
(начальное состояние - запрещено)
Mutual-failure - доступ только с тех хостов, которые
перечислены в Allow и неперечислены в Deny
DFLA Allowfrom {адрес}
(определяет с каких адресов будет дан доступ к данной директории)
all - со всех хостов
доменное имя (м.б. частичное) - с тех хостов, имя которых заканчивается на эту строку;
сервер делает обратный, затем прямой поиск DNS
полный IP адрес
частичный IP адрес - первые 1, 2 или 3 байта IP адреса
a.b.c.d/e.f.g.h - network/netmask
a.b.c.d/nnn - network/бит
DFLA Allowfromenv=имя-переменной
(доступ разрешается только если определена соответствующая переменная окружения)
DFLA Deny ...
(определяет с каких адресов не будет доступа к данному каталогу или файлу;
синтаксис идентичен синтаксису директивы Allow)
Директива ядра 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 предназначен
для организации массового виртульного хостинга.
При получении запроса сервер прежде всего определяет
виртуальный хост, к которому он относится. Соответствующая
секция 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,
которые также обрабатываются последовательно до первого совпадения):
SV Aliasстрокаимя-каталога-или-файла
(запрос с URL (% декодируются), начинающегося со строка, будет
отображен на файл, начинающийся с имя-каталога-или-файла (м.б. вне DocumentRoot);
доступ к имя-каталога-или-файла должен быть разрешен отдельно)
SV AliasMatchрегулярное-выражениеимя-каталога-или-файла
(аналогично Alias, но сравнение производится в
соответствие с регулярным выражением; часть регулярного выражения,
заключенная в скобки, запоминается как позиционный параметр и м.б.
вставлена в правую часть ($1 и т.д.))
SVDFLA Redirect [статус ] строкановый-URL
(преобразование %-декодированного исходного URL (строка) в
результатирующий (новый-URL);
клиенту возвращается сообщение об ошибке и новый URL, который он должен запросить;
строка д.б. абсолютным адресом; статус (по умолчанию temporary - код 302)
определяет код возврата:
permanent - ресурс перемещён навсегда (301)
temp - ресурс перемещён временно (302)
seeother - ресурс замещён (303)
gone - ресурс удален (410) (в этом случае новый URL д.б. опущен)
явное указание кода
SV RedirectMatch [статус ] regexurl
(аналогично Redirect, но сравнение производится не на совпадение начал, а по
соответствию URL от клиента регулярному выражению; строки, соответствующие
подвыражениям в скобках, помещаются в позиционные переменные и м.б. использованы)
RedirectPermanent - эквивалент Redirect permanent
RedirectTemp - эквивалент Redirect temp
SV ScriptAliasстрокаимя-каталога-или-файла
(аналогично директиве Alias, но дополнительно пометить директорию как содержащую CGI)
SV ScriptAliasMatchregexимя-каталога-или-файла
(аналогично директиве AliasMatch, но дополнительно пометить директорию как содержащую CGI)
Модуль dir обеспечивает отображение имени каталога, указанного в URL,
в запрос индексного файла:
SVDA DirectorySlashOn|Off (по умолчанию - On;
позволяет перенаправить неправильно оформленные запросы к каталогу
(без завершающего '/') в правильные)
SVDA DirectoryIndexlocal-url ...
(задает имя файла (обычно относительно запрашиваемого каталога),
в котором лежит вручную сделанный индекс каталога (по умолчанию - index.html);
сервер возвращает первый найденный ресурс в ответ на запрос к каталогу)
Модуль speling пытается скорректировать очепатки в URL
(директива SVDFLA CheckSpelling Off|On): ошибки с прописными/строчными буквами,
пропуск одного символа, вставка одного символа, перестановка 2 символов,
замена одного символа). Предполагаемое правильное имя (список имён) возвращается в виде
сообщения перенаправления.
Модуль 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.
Большинство запросов обслуживается встроенными обработчиками, в зависимости от типа
содержимого. Имеется возможность привязывать специальные обработчики в зависимости
от типа, имени или расположения ресурса:
default-handler (обработка статических страниц)
send-as-is (модуль asis, заголовки ответа в файле)
server-info (модуль info; выдача информации о конфигурации сервера)
server-status (модуль status; выдача информации о текущем состоянии сервера)
type-map (модуль negotiation)
модуль actions позволяет добавить дополнительные обработчики
Директивы ядра позволяют назначать всем ресурсам,
описанным в секции (DFLA) MIME тип (ForceType), входной фильтр (SetInputFilter),
выходной фильтр (SetOutputFilter), обработчик (SetHandler). Директива DefaultType
назначает MIME тип по умолчанию. Директива AddOutputFilterByType назначает
выходной фильтр в соответствии с указанным MIME типом. Директива AddDefaultCharset
определяет будет ли информация о наборе символов добавляться к заголовку ответа.
Директивы модуля mime:
SVDFLA AddCharset набор-символов суффикс ...
(ассоциация суффикса файла с набором символов - добавление в список)
SVDFLA AddEncoding MIME-кодирование суффикс ...
(ассоциация суффикса файла с методом кодирования - добавление в список)
SVDFLA AddHandler имя-обработчика суффикс ...
(ассоциация суффикса файла с обработчиком - добавление в список)
SVDFLA AddInputFilter имя-фильтра[;имя-фильтра ...]
суффикс ...
(ассоциация суффикса файла с последовательностью фильтров - добавление в список)
SVDFLA AddLanguage код-языка суффикс ...
(ассоциация суффикса файла с языком - добавление в список)
SVDFLA AddOutputFilter имя-фильтра[;имя-фильтра ...]
суффикс ...
(ассоциация суффикса файла с последовательностью фильтров - добавление в список)
SVDFLA AddType MIME-тип суффикс ...
(ассоциация суффикса файла с MIME типом - добавление в список)
SVDFLA DefaultLanguage код-языка
D ModMimeUsePathInfo Off | On (будет ли модуль mime использовать
path_info, т.е. "лишнюю" часть URL; см. также AcceptPathInfo)
SVDFLA MultiviewsMatch Any|NegotiatedOnly|Filters|Handlers
[Handlers|Filters] (управление поведением MultiViews модуля negotiation;
по умолчанию - NegotiatedOnly, т.е. суффикс файла обязательно д.б. привязан
к MIME типу, языку, набору символов или методу кодирования)
VDFLA RemoveCharset суффикс ...
(ассоциация суффикса файла с набором символов - удаление из списка)
VDFLA RemoveEncoding суффикс ...
(ассоциация суффикса файла с методом кодирования - удаление из списка)
VDFLA RemoveHandler суффикс ...
(ассоциация суффикса файла с обработчиком - удаление из списка)
VDFLA RemoveInputFilter суффикс ...
(ассоциация суффикса файла с последовательностью фильтров - удаление из списка)
VDFLA RemoveLanguage суффикс ...
(ассоциация суффикса файла с языком - удаление из списка)
VDFLA RemoveOutputFilter суффикс ...
(ассоциация суффикса файла с последовательностью фильтров - удаление из списка)
VDFLA RemoveType суффикс ...
(ассоциация суффикса файла с MIME типом - удаление из списка)
S TypesConfig имя-файла (conf/mime.types; файл содержит ассоциации
между суффиксами файлов и MIME типами по умолчанию)
Модуль mime_magic определяет MIME тип по содержимому файла,
аналогично программе file(1). Директива MimeMagicFile (SV) определяет имя файла
описаний. С дистрибутивом поставляется файл conf/magic, но его необходимо указать явно.
Модуль deflate реализует выходной фильтр DEFLATE - сжатие результатов
перед посылкой клиенту и рассжатие запросов (алгоритм gzip, zlib). Работает после SSI и PHP.
Включается директивами SetInputFilter, SetOutputFilter, AddOutputFilterByType.
Для работы кеширующих прокси необходимо позаботиться о добавлении правильного заголовка
Vary (добавление чрезмерно правильного заголовка: Header set Vary *). Директивы:
SV DeflateBufferSize 8096
SV DeflateCompressionLevel уровень-сжатия (от 1 до 9)
SV DeflateFilterNote [Input|Output|Ratio] имя-пометки
(позволяет поместить информацию в журнал: %{имя-пометки}n)
SV DeflateMemLevel 9
SV DeflateWindowSize 15
Модуль ext_filter позволяет использовать внешнюю программу в качестве
выходного фильтра (ответ сервера поступает на stdin, результат работы программы считывается
с stdout). Описанные фильтры используются в директиве SetOutputFilter. Директивы:
S ExtFilterDefine имя-фильтра параметры (описание фильтра, где параметры:
Обработчик 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:
Входной файл для обработчика type-map содержит описания документов,
каждая секция (вариант) может содержать метод кодирования, язык, длину, MIME тип с
параметрами (level, qs), тело варианта или локальный URI с телом варианта.
Механизм MultiViews позволяет выбрать из имеющихся файлов, имена которых начинаются
с локальной части URI, наиболее подходящий на основе типа, языка, набора символов
и метода кодирования, определяемых модулем mime по суффиксам файлов. Директивы:
SV CacheNegotiatedDocs Off | On (разрешить кеширование выбранных документов)
SVDFLA ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback] (Prefer;
использовать приоритет языков, установленный директивой LanguagePriority,
для определения варианта; Fallback позволяет использовать приоритет языков,
если не нашлось ни одного подходящего документа)
SVDFLA LanguagePriority код-языка ...
(определяет приоритет языков в ситуации, когда
клиент не предоставил свой выбор; может быть задан с помощью переменной окружения
prefer-language)
Обработчик 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 (только после
аутентификации). Директивы:
SV ScriptLog имя-файла (файл открывается от имени пользователя, указанного в User,
(например, nobody), т.е. его необходимо создать заблаговременно и дать права на запись)
SV ScriptLogBuffer байт (1024; часть PUT или POST, которая попадёт в журнал)
SV ScriptLogLength байт (10385760; максимальный размер журнала)
SV ScriptSock имя-файла (logs/cgisock; только для модуля cgid; сокет для связи с демоном
cgid)
Модуль suexec в сочетании с утилитой suexec
позволяет запускать CGI программы под uid и gid, указанным в директиве SuexecUserGroup (SV).
Модуль actions позволяет привязать CGI скрипт к обработчику,
MIME типу или методу запроса (GET, PUT и т.д.). Директивы:
SVDFLA Action тип-или-имя-обработчика имя-скрипта (запуск CGI скрипта (д.б. объявлен
ScriptAlias или AddHandler) для ресурса указанного типа или которому назначен
обработчик)
SVD Script метод имя-скрипта (запуск CGI скрипта (д.б. объявлен
ScriptAlias или AddHandler), если запрос указанного метода; прописные и строчные
буквы различаются; запрос GET будет обработан скриптом только если URI
имеет аргумент запроса (...?что-нибудь))
Модуль charset_lite является подмножеством (очень небольшим) модуля
charset, сделанного для Russian Apache.
К сожалению, переноса модуля charset из Apache в Apache 2 не предвидится.
При перекодировке используется библиотека iconv(3) и имена кодовых таблиц должны
соответствовать, принятым в ней, а не какому-то стандарту. Проверить допустимость
перекодировки можно с помощью программы iconv:
ImplicitAdd (модуль неявно вставляет свой фильтр при необходимости перекодировки)
NoImplicitAdd (требуется если последовательность фильтров задаётся явно
с помощью AddOutputFilter)
Модуль expires управляет содержимым заголовков Expires и Cache-Control
(max-age) в ответах сервера. Эти заголовки используются при кешировании клиентом
и промежуточными прокси. Директивы:
SVDFLA ExpiresActive On | Off (посылать заголовок Expires и Cache-Control
для документов, определённых ExpiresByType и ExpiresDefault)
SVDFLA ExpiresByType MIME-тип {Mсекунд | Aсекунд}
(определяет Expires и max-age
для документов указанного типа; M - время отсчитывается с момента последнего
изменения файла (не действует для динамически создаваемых документов),
A - время отсчитывается с момента обращения)
SVDFLA ExpiresDefault {Mсекунд | Aсекунд}
Модуль headers позволяет удалять и заменять заголовки запросов и ответов.
Директивы:
SVDFLA Header [условие] действие имя-заголовка
[значение] [env=[!]имя-переменной]
(настройка заголовков ответа; работает после обработчиков и фильтров;
условие может быть onsuccess (коды ответа 2xx) или always;
значение может содержать спецификаторы формата: %t - замещается
на t=UNIX-время-в-микросекундах, %D - замещается на D=микросекунд-обработки-запроса,
%{имя-переменной}e;
env= задаёт условие выполнения директивы (директива выполняется, если указанная
переменная установлена (не установлена);
действия:
set - установить значение заголовка, замещая старое значение
append - добавить значение к заголовку через запятую
add - добавить заголовок, даже если заголовок с таким именем уже есть
unset - удалить все заголовки с указанным именем
echo - заголовок с указанным именем (м.б. регулярное выражение) из запроса
копируется в ответ
SVDFLA RequestHeaderдействие имя-заголовка [значение]
(настройка заголовков запросов; работает до обработчиков и фильтров;
действия:
set - установить значение заголовка, замещая старое значение
append - добавить значение к заголовку через запятую
add - добавить заголовок, даже если заголовок с таким именем уже есть
Модуль unique_id обеспечивает переменную UNIQUE_ID с уникальным идентификатором
для каждого запроса в кластере серверов (требуется синхронизация по NTP и уникальные IP адреса).
Модуль usertrack позволяет отслеживать клиентов с помощью куки.
Значение куки записывается в журнал с помощью спецификатора формата "%{cookie}n".
Директивы:
SVDFLA CookieDomain имя-домена-куки (должен начинаться с точки и иметь
минимум одну точку внутри; можно не задавать)
SVDFLA CookieExpires время-хранения (можно записывать в секундах или так:
"2 weeks 3 days 7 hours"; если не задано, то действует на время сессии клиента)
Модуль autoindex позволяет автоматически создавать индекс каталога
из списка находящихся в каталоге файлов, если отсутствует индекс, сделанный вручную
(задаётся модулем dir). Действие модуля включается флагом Indexes
директивы Option. Директивы модуля:
SVDA AddAltстрокаfilefile...
(какую строку текста показывать вместо иконки, если у клиента
отключена загрузка картинок; file задается суффиксом,
частичным именем файла или шаблоном)
SVDA AddAltByEncodingстрокаMIME-encoding...
(аналогично, но определяется не по имени файла, а по MIME-кодировке (типа x-compress)
SVDA AddAltByTypeстрокаMIME-type ...
(аналогично, но определяется по MIME-типу (например, text/html)
SVDA AddDescriptionстрокаfilefile...
(текстовое описание файла; file задается суффиксом,
частичным именем файла, шаблоном или полным именем)
SVDA AddIconiconnamename ...
(определяет какую картинку показать для файла, соответствующего name;
icon имеет формат либо URL, либо в круглых скобках
альтернативный текст и URL через запятую; name задается суффиксом,
частичным именем файла, шаблоном, полным именем
или ключевыми словами ^^DIRECTORY^^ и ^^BLANKICON^^)
SVDA AddIconByEncodingiconMIME-encoding ...
(аналогично, но определяется не по имени файла, а по MIME-кодировке (например, x-compress))
SVDA AddIconByTypeiconMIME-typeMIME-type ... (аналогично, но определяется по MIME-типу
(например, text/html))
SVDA DefaultIconurl (если никакая иконка не подошла, то будет
использоватся эта)
SVDA FancyIndexingon|off (делать красивый индекс -
возможность сортировки по столбцам)
SVDA HeaderNameимя-файла (в качестве заголовка индекса будет
вставлен указанный файл (точнее URI; text/*); сначала ищется файл имя-файла.html,
затем просто имя-файла)
SVDA IndexIgnorefilefile ...
(список файлов, которые надо скрывать; file задается суффиксом,
частичным именем файла, шаблоном или полным именем)
SVDA IndexOptions [+|-]option
[+|-]option ... (опции сливаются с учетом знаков)
DescriptionWidth=[n | *] - ширина колонки (* - использовать длину самого
длинного описания)
FancyIndexing - делать красивый индекс (возможность сортировки по столбцам)
FoldersFirst
HTMLTable
IconHeight[=pixels]
IconsAreLinks - для fancy indexing
IconWidth[=pixels]
IgnoreCase
IgnoreClient - не обрабатывать запросы клиента по сортировке
NameWidth=[n | *] - ширина колонки (* - использовать длину самого
длинного имени файла)
ScanHTMLTitles - вытаскивать описание файла из HTML-текста
(только fancy indexing)
SuppressColumnSorting - имена колонок не будут вызывать
сортировку индекса при fancy indexing
SuppressDescription - не включать колонку с описанием файла при fancy indexing
SuppressHTMLPreamble - подавить вставку заголовка перед
включением файла, определенного по HeaderName
SuppressIcon
SuppressLastModified - подавление колонки при fancy indexing
SuppressRules - не выводить <hr>
SuppressSize - подавление колонки при fancy indexing
VersionSort - нормальная сортировка имён файлов, содержащих номер версии
SVDA ReadmeNamefilename
(в конец индекса будет вставлен указанный файл (точнее URI; text/*); сначала ищется файл
имя-файла.html, затем просто имя-файла)
Модули 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):
DFL Dav Off|On|filesystem (разрешив, нельзя запретить для подкаталога)
SVDFL DavMinTimeout секунд (0; минимальное время блокировки ресурса;
при запросе блокировки клиент указывает желаемое время (веб-папки MS - 120 секунд),
но сервер может его изменить)
Директивы модуля dav_fs (метод хранения filesystem для модуля dav;
при сборке требуется --enable-dav):
SV DavLockDB имя-файла (apache добавляет суффикс к имени и хранит
в этом файле (файлах) БД блокировок
ресурсов; каталог должен быть открыт на запись для процесса apache)
Пример:
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?).
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 я не понял).
Модуль ssl обеспечивает шифрование по протоколу SSL/TLS.
Требует наличия OpenSSL и
(понимания механизма действия). Кстати, виртуальный хостинг
с привязкой по имени невозможен (в момент установления SSL соединения заголовок
Host: ещё не получен), так что каждый виртуальный сервер требует отдельного IP адреса
(или использования нестандартного порта).
Директивы:
характеристики протокола и механизма:
SV SSLEngine Off|On (включить механизм SSL/TLS для виртуального хоста)
SVDFLA SSLCipherSuite спецификация (какие алгоритмы использовать: в явном виде
(алгоритмы обмена ключей, алгоритмы аутентификации, алгоритмы шифрования,
алгоритмы хеширования) или сокращения (MEDIUM, HIGH), например:
"!EXP:!NULL:+HIGH:+MEDIUM:-LOW" или просто "HIGH:MEDIUM";
посмотреть получившийся набор можно командой 'openssl ciphers -v спецификация')
SVDFLA SSLOptions [+|-]опция ... (похоже, что без плюса не работает)
StdEnvVars (создавать переменные окружения SSL_ - см. ниже)
CompatEnvVars (создавать переменные окружения для совместимости с другими реализациями)
ExportCertData (дополнительные переменные окружения, содержащие сертификат в PEM)
FakeBasicAuth (DN клиентского сертификата используется как имя пользователя
для базового метода аутентификации; в файле с паролями у такого пользователя
должен быть зашифрованный пароль "password" - "xxj31ZMTZzkVA" или
"$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/"; необходимо дополнительно указать что будет
рассматриваться в качестве имени пользователя (переменная REMOTE_USER), например:
"SSLUserName SSL_CLIENT_S_DN")
StrictRequire (если доступ запрещён по SSLRequireSSL или SSLRequire,
то реально запрещать доступ несмотря на "Satisfy any")
OptRenegotiate (ускоренное пересоединение при смене параметров протокола)
S SSLMutex тип (none; способ реализации семафоров для записи в SSL кеш: none
(не рекомендуется), default - выбирается автоматически при сборке, см.
AcceptMutex)
S SSLRandomSeed startup|connect источник [байт] (откуда брать начальное значение
генератора псевдослучайных чисел: builtin (не рекомендуется для startup),
file:имя-файла (например: /dev/random 512 (не рекомендуется для connect, т.к. блокирует
работу, пока не накопит запрошенное количество случайных данных), /dev/urandom 1024),
exec:имя-программы; egd:имя-сокета (egd - Entropy Gathering Daemon))
S SSLSessionCache тип (none; кеширование, если клиент использует несколько
параллельных потоков запросов; типы: none, dbm:имя-файла, shm:имя-файла;
в процедуру запуска необходимо добавить удаление этого файла)
SV SSLSessionCacheTimeout секунд (300)
описание сервера:
SV SSLCertificateFile имя-файла (сертификат сервера в формате PEM, может включать ключ;
если ключ зашифрован, то инициируется диалог запроса парольной фразы)
SV SSLCertificateChainFile имя-файла (цепочка сертификатов CA до самого корня, PEM)
SV SSLCertificateKeyFile имя-файла (частный ключ сервера, PEM;
если ключ зашифрован, то инициируется диалог запроса парольной фразы)
SV SSLPassPhraseDialog тип (builin или exec:имя-программы)
требования к клиентам:
DA SSLRequireSSL (все соединения д.б. защищены SSL/TLS)
DA SSLRequire логическое-выражение (может включать SSL_ переменные: %{...})
SVDFLA SSLVerifyClient уровень (none; как проверять сертификат клиента:
none
optional
require
optional_no_ca
SVDFLA SSLVerifyDepth число (1; максимальная глубина цепочки CA в сертификате клиента)
SV SSLCACertificateFile имя-файла (цепочка сертификатов CA в формате PEM,
которыми могут быть подписаны сертификаты клиентов)
SV SSLCACertificatePath имя-каталога (каталог должен содержать сертификаты CA
в формате PEM, которыми могут быть подписаны сертификаты клиентов;
имена файлов должны соответствовать хешам сертификатов)
SV SSLCARevocationFile имя-файла (слитые CRL CA клиентов в формате PEM)
SV SSLCARevocationPath имя-каталога (каталог должен содержать CRL CA клиентов
в формате PEM; имена файлов должны соответствовать хешам сертификатов)
требования к прокси:
SV SSLProxyEngine Off|On (использовать протокол SSL/TLS для прокси)
SSLProxyProtocol, SSLProxyCipherSuite (параметры протокола при общении с прокси)
SSLProxyMachineCertificateFile, SSLProxyMachineCertificatePath (сертификаты сервера
для общения с прокси)
SSLProxyVerify, SSLProxyVerifyDepth (как проверять сертификат прокси)
SSLProxyCACertificateFile, SSLProxyCACertificatePath, SSLProxyCARevocationFile,
SSLProxyCARevocationPath (сертификаты CA и CRL при проверке прокси)
Переменные окружения (записываются в журнал в виде: "%{SSL_PROTOCOL}x"):
HTTPS (используется протокол HTTPS)
SSL_PROTOCOL (SSLv2, SSLv3, TLSv1)
SSL_SESSION_ID (в шестнадцатеричном кодировании)
SSL_CIPHER
SSL_CIPHER_EXPORT (true)
SSL_CIPHER_USEKEYSIZE (длина используемого ключа)
SSL_CIPHER_ALGKEYSIZE (длина возможного ключа)
SSL_VERSION_INTERFACE (версия mod_ssl)
SSL_VERSION_LIBRARY (версия OpenSSL
SSL_CLIENT_M_VERSION (версия сертификата клиента)
SSL_CLIENT_M_SERIAL (серийный номер сертификата клиента)
SSL_CLIENT_S_DN (DN сертификата клиента, имеются переменные для отдельных полей)
SSL_CLIENT_I_DN (DN выдавшего сертификат клиенту, имеются переменные для отдельных полей)
SSL_CLIENT_V_START (начало действия сертификата клиента)
SSL_CLIENT_V_END (конец действия сертификата клиента)
httpd - собственно сервер (сигнал HUP - заново прочесть
конфигурацию, TERM - завершить свою работу и всех сыновей, USR1 - мягкий перезапуск;
сигнал надо послать тому
процессу, pid которого указан в PidFile, обычно /usr/local/apache2/logs/httpd.pid):
graceful (перезапуск без обрывания текущих соединений, статистика не сбрасывается;
журналы закрываются не сразу, рекомендуемая пауза - 15 минут;
рекомендуется предварительно проверить синтаксис нового конфигурационного файла)
множество мелочных опций по месту установки различных частей
--enable-layout=Apache (раскладка файлов, перечень возможных
раскладок и описание см. config.layout; в частности, Apache: /usr/local/apache2/bin/,
/usr/local/apache2/conf/, /usr/local/apache2/htdocs/, /usr/local/apache2/cgi-bin/,
/usr/local/apache2/logs/)
--enable-имя_модуля[=static|shared] (подчёркивания надо заменять на тире;
configure не сообщает об ошибках в именах!)
--disable-имя_модуля
--with-module=тип-модуля:имя-файла,... (добавление внешнего модуля,
не входящего в комплект поставки; ищется в каталоге
modules/тип-модуля)
подготовка: установить пакет db4-devel (для x86_64 обязательно удалить db4*.i386, expat*.i386);
в /etc/ld.so.conf.d д.б. хоть один *.conf;
пакет apr-util удалить
завести группу apache (48?)
завести пользователя apache (48?) с /sbin/nologin
создать директорию для сборки, распаковать в нее httpd-2.0.61.tar.bz2
(взять на зеркалах и проверить md5)