HTTP сервер Apache версии 2.0

Переход от версии 1.3 к версии 2.0
Этот документ необходим для того, чтобы помочь пользователям
перейти к использованию сервера версии 2.0. Здесь вы найдёте лишь
краткие замечания; более подробную информацию о нововведениях можно
найти либо в документе Новые возможности, либо в файле src/CHANGES.
Изменения в конфигурировании процесса сборки сервера
Изменения в конфигурировании работы сервера
Другие изменения
Модули сторонних разработчиков
См. также
Изменения в конфигурировании процесса сборки сервера
- Apache теперь использует систему
autoconfиlibtoolдля конфигурирования процесса сборки. Использование этой системы похоже на использование APACI в Apache 1.3, хотя и не является абсолютно тем же самым. - В добавок к обычному списку модулей, которые вы можете выбрать при сборке сервера, в Apache 2.0 появились мульти - процессные модули (МП - модули), в которых теперь сконцентрирована основная часть кода, отвечающего за обработку запросов.
Изменения в конфигурировании работы сервера
- Многие из тех директив, которые обслуживались ядром сервера
Apache 1.3, теперь перенесены в мульти - процессные модули. Если вы
хотите, чтобы поведение сервера было наиболее приближено к поведению
Apache 1.3, то при сборке вы должны выбрать МП-модуль
prefork. Другие МП-модули предоставляют иные директивы, отвечающие за работу процессов сервера и обработку запросов. - Прокси модуль был переписан,
и теперь поддерживает спецификацию HTTP/1.1. Одним из наиболее
важных изменений является то, что директивы, контролирующие работу
модуля, теперь располагаются в секции
<Proxy>, а не в <Directory proxy:>, как это было ранее. - Обработка
PATH_INFO(путевой информации, следующей за именем запрашиваемого документа) изменилась для некоторых модулей. Модули, которые раньше были написаны как обработчики (handler), а теперь выполняют роль фильтров, могут более не принимать запросы, содержащиеPATH_INFO. Такие фильтры, как INCLUDES или реализованы первыми в базовом обработчике, таким образом они не могут принимать запросы, содержащиеPATH_INFO. Вы можете использовать директивуAcceptPathInfo, чтобы заставить базовый обработчик принимать подобные запросы, и таким образом восстановить возможность использованияPATH_INFOв документах, использующих включения на стороне сервера (SSI). - Директива
CacheNegotiatedDocsтеперь может принимать аргументыonиoff. Уже существующие экземпляры директивыCacheNegotiatedDocsдолжны быть заменены наCacheNegotiatedDocs on. -
Директива
ErrorDocumentболее не использует открывающую кавычку в начале аргумента для обозначения того, что аргумент является текстовым сообщением. Вместо этого вам необходимо заключать весь текст сообщения в двойные кавычки. Например, существующие директивыдолжны быть заменены наErrorDocument 403 "Некоторое сообщениеЕсли второй аргумент не является правильно оформленным идентификатором ресурса (URL) или путевым именем, то он будет интерпретироваться как текстовое сообщение.ErrorDocument 403 "Некоторое сообщение" - Директивы
AccessConfigиResourceConfigболее не существуют. Имеющиеся их копии могут быть заменены директивойInclude, которая имеет ту же функциональность. Если прежде вы не включали их в конфигурационные файлы, тем самым используя их значения по умолчанию, то сейчас, для достижения того же результата, вам надо добавить следующие строки в файл httpd.conf:Include conf/access.confиInclude conf/srm.conf. Для того чтобы быть уверенным в том, что Apache считывает конфигурационные файлы именно в том порядке, который был предусмотрен старыми директивами, надо поместить директивыIncludeв конце файла httpd.conf, причём сперва ту, что включаетsrm.conf, а затем ту, что включаетaccess.conf. - Директивы
BindAddressиPortболее не существуют. Эквивалентная функциональность предоставляется более гибкой директивойListen. - В Apache 1.3 директива
Portиспользовалась, кроме всего прочего, для того чтобы сервер мог формировать правильные ссылки на самого себя. В Apache 2.0 для тех же целей служит новый синтаксис директивыServerName: он был изменён таким образом, что теперь имя хоста и номер порта можно указывать в одной этой директиве. - Директива
ServerTypeболее не существует. Метод обработки запросов теперь определяется посредством выбора МП-модуля. В настоящее время нет такого МП-модуля, который мог бы запускаться посредством демона inetd. - Модули
mod_log_agentиmod_log_referer, которые предоставляли такие директивы, какAgentLog,RefererLogиRefererIgnore, были убраны. Ведение журнала агентов пользователей (agent logs) и отправителей (referer logs) по-прежнему возможно посредством использования директивыCustomLogмодуляmod_log_config. - Директивы
AddModuleиClearModuleListболее не существуют. Они использовались для обеспечения правильного порядка загрузки модулей. Новый API для Apache 2.0 позволяет модулям самим указывать порядок их загрузки, что делает эти директивы ненужными. - Директива
FancyIndexingбыла убрана. Ее функциональность теперь обеспечивается опциейFancyIndexingв директивеIndexOptions - Алгоритмы контентной негоциации (content-negotiation),
реализуемые модулем
mod_negotiation, стали более строгими в той части, где определяются файлы по умолчанию. Теперь эти алгоритмы будут выбирать файлы только из списка доступных (negotiable) файлов. Старое поведение может быть восстановлено директивойMultiviewsMatch. - (начиная с версии 2.0.51)
Функциональность директивы
ErrorHeaderбыла передана директивеHeader, потому что прежнее название директивы было некорректно. Теперь необходимо писатьHeader always set foo barчтобы получить желаемый результат.
Другие изменения
- Модуль
mod_auth_digest, который имел экспериментальный статус в Apache 1.3, теперь является стандартным модулем. - Модуль
mod_mmap_static, который имел экспериментальный статус в Apache 1.3, заменён модулемmod_file_cache. - Организация дистрибутива полностью изменена и теперь
более не содержит независимого каталога
src. Вместо этого исходные коды логически организованы в основном каталоге дистрибутива, а установка скомпилированного сервера производится в отдельный каталог.
Модули сторонних разработчиков
Значительные изменения были внесены в API для Apache 2.0. Существующие модули, написанные с использованием Apache 1.3 API, не будут работать под Apache 2.0, если не внести в них необходимые изменения. Более подробная информация по этому поводу доступна в документации для разработчиков.

