Релиз новой стабильной ветки http-сервера Apache 2.4

Доступен релиз http-сервера Apache 2.4.1, первый выпуск новой стабильной ветки 2.4.x, последние годы развиваемой в рамках экспериментальной ветки 2.3.x (прошлая стабильная ветка Apache 2.2 вышла в 2005 году, а первая альфа-версия 2.3.0 была представлена в 2008 году). В составе ветки 2.4.x развивались новые возможности, которые невозможно было интегрировать в стабильную ветку 2.2.x в силу большого размера вносимого кода, необходимости значительной переработки подсистем или из-за нарушения совместимости.
Несмотря на то, что в ветке 2.4 заметно расширен API, он остаётся обратно совместимым с API Apache 2.2. Написанные для Apache 2.2.x модули потребуют перекомпиляции, но будут работать в Apache 2.4 без изменений кода или потребуют минимальных изменений. В отличие от прошлых выпусков, из состава пакета с исходными текстами Apache 2.4 исключены компоненты Apache Portable Runtime (APR) и APR-Util, которые теперь распространяются отдельно и имеют свою нумерацию версий. Для сборки Apache 2.4 следует установить APR 1.4.x и APR-Util 1.4.x.
Ключевые новшества:

  • Несколько MPM могут быть одновременно собраны в виде динамически загружаемых модулей, которые можно активировать в конфигурации без последующей пересборки;
  • С модуля Event MPM снят гриф экспериментальной разработки. Event MPM основан на коде модуля Worker и реализует гибридную модель обработки соединений, сочетающую многопоточность с пулом ожидающих соединения процессов;
  • Возможность определения через оператор "If" блоков конфигурации, привязанных к отдельным запросам (Per-request configuration). Например, можно использовать If "$req{Host} = ''", внутри выражения можно ссылаться на HTTP-заголовки запроса ($req), заголовки ответа ($resp) и переменные окружения ($env);
  • Реализована поддержка асинхронных операций чтения и записи;
  • Возможность определения через директиву LogLevel разных форматов ведения лога для отдельных модулей и директорий;
  • Возможность указания значения параметра KeepAliveTimeout в миллисекундах;
  • Новые модули:
    • mod_lua - позволяет интегрировать в httpd интерпретатор языка Lua;
    • mod_proxy_fcgi - модуль с поддержкой проксирования протокола FastCGI (поддержка схемы "fcgi:" в директиве "ProxyPass");
    • mod_proxy_scgi - модуль с поддержкой проксирования протокола SCGI (поддержка схемы "scgi:" в директиве "ProxyPass");
    • mod_ratelimit - позволяет организовать ограничение пропускной способности клиентов (например, суммарно для всех можно ограничить общую пропускную способность только для страницы загрузки файлов);
    • mod_remoteip - заменяет значение IP-клиента на содержимое из определенного HTTP-заголовка (например, X-Client-IP или X-Forwarded-For). Обычно модуль используется при работе apache в роли бэкенда;
    • mod_reflector - позволяет возвращать клиенту тело запроса, применив к нему определенный фильтр;
    • mod_reqtimeout - позволяет установить таймаут и минимальную интенсивность потока данных при обработке входящих запросов (например, "RequestReadTimeout body=10,MinRate=1000" ограничивает время загрузки тела запроса 10 секундами, плюс прибавляет по 1 секунде на каждые 1000 байт полученных данных);
    • mod_request - позволяет определить фильтр для обработки и распространения тела запроса;
    • mod_slotmem_shm - система доступа к разделяемой памяти на основе слотов (scoreboard);
    • mod_allowmethods - позволяет ограничить некоторые HTTP-методы не мешая авторизации и аутентификации (например, "AllowMethods GET HEAD OPTIONS");
    • mod_buffer - позволяет организовать буферизацию для входящих и исходящих фильтров.
  • Измененные модули:
    • В mod_ssl добавлена поддержка проверки статуса клиентского сертификата на OCSP серверах. Также добавлена возможность совместного использования данных SSL сессии на нескольких http-серверах, через задействование memcached;
    • В mod_cache добавлена поддержка кэширования HEAD-запросов. Директивы mod_cache теперь можно указывать в привязке к отдельным директориям, а не только для отдельного сервера. Добавлена возможность выводить устаревшие данные из кэша в случае недоступности рабочего бэкенда. В заголовок X-Cache можно подставлять значения HIT/MISS/REVALIDATE;
    • В mod_include в элемент 'include' добавлена поддержка атрибута 'onerror', позволяющего вывести свой документ при ошибке вместо вывода используемого по умолчанию текста ошибки (например, include virtual="/not-exist.html" onerror="/error.html");
    • В mod_proxy значительно увеличена производительность работы директивы ProxyPass в блоках Location и LocationMatch, что значительно быстрее, чем использование традиционного синтаксиса "ProxyPass путь URL";
    • В mod_proxy_balancer расширено число параметров BalancerMembers, которые можно менять через balancer-manager. Добавлена возможность добавления новых параметров BalancerMembers через balancer-manager. Поддержка изменения во время исполнения подмножества параметров директивы Balancer;
    • В модулях mod_cgi, mod_include, mod_isapi и т.п. преобразование заголовков в переменные окружения осуществляется по более строгим правилам, например, блокируются попытки осуществления XSS-атак через подстановку скриптов в заголовки. Все заголовки в которых используются специальные символы теперь молча удаляются. Для проброса некорректных с точки зрения новых правил переменных окружения в устаревшие скрипты предусмотрено несколько обходных путей;
    • В модуле mod_authz_core расширенная логика авторизации может быть задана при помощи Require и связанных директив, таких как RequireAll;
  • Дополнительные компоненты:
    • В поставку Apache включен скрипт fcgistarter, предназначенный для запуска серверных FastCGI процессов.
    • В утилиту htcacheclean - добавлены функции просмотра и удаления отдельных прокэшированных URL и связанных с ними мета-данных;
  • Средства для разработчиков модулей:
    • Интерфейс для кэширование небольших объектов, основанный на ранее созданном для mod_ssl кэше сессионных данных. В качестве хранилища можно использовать цикличный буфер в разделяемой памяти, dbm-базу на диске и memcached;
    • Добавлен парсер выражений общего назначения, API которого основан на ap_expr.h. Код парсера основан на ранее реализованном парсере для mod_include;
    • Добавлен hook check_config для проверки конфигурации на ранней стадии загрузки, позволяя независимо проанализировать параметры определенных директив и при необходимости откорректировать их;
    • Для оценки статуса mod_cache добавлен hook cache_status, вызываемый после принятия решения о кэшировании. Реализация по умолчанию добавляет при ответе опциональные заголовки X-Cache в X-Cache-Detail.



Яндекс.Метрика
Счётчик ТЦ#65533;Ц LiveRSS: Каталог русскоязычных RSS-каналов