Важные замечания при обновлении Apache с 2.2 до 2.4

Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

(Шутка с Баша)

 

Хотелось бы начать с того, что на днях вышел Apache 2.4.3, в котором наконец-то убран баг с AcceptFilter https none и ресурс Apache Haus теперь официально рекомендует обновиться с 2.2 до 2.4. Важно отметить, что на Apache 2.4 (правда, только на 32-битную версию) портрирован модуль поддержки PHP.

Пара полезных ссылок:

Обновление Apache с 2.2 до 2.4 не вызывает каких либо особых трудностей. Тем не менее,

на некоторые моменты следует обратить внимание.

Изменения компиляционных настроек

Процесс компиляции очень схож с таковым для версии 2.2. Ваша старая строка параметров конфигурации (которая расположена в папке build/config.nice установленного сервера) может быть использована в большинстве случаев. Присутствует всего несколько изменений в настройках по умолчанию. Рассмотрим их:

  • Три модуля были удалены: mod_authn_default, mod_authz_default, mod_mem_cache. Если вы пользовались mod_mem_cache в 2.2, обратите внимание на mod_cache_disk в 2.4.
  • Все балансировочные реализации были перемещены в индивидуальные, автономные mod_proxy submodules, например mod_lbmethod_bybusyness. Вы можете встраивать и загружать их по отдельности.
  • Из поддерживаемых платформ были удалены: BeOS, TPF, и ещё более старые платформы, такие как A/UX, Next и Tandem. В любом случае, кажется Apache там всё равно не работал.
  • конфигурация: динамические модули (DSO) встроены по умолчанию
  • конфигурация: по умолчанию загружаются только базовые настройки модулей. Другие дерективы LoadModule закомментированы.
  • конфигурация: настройки модуля «most» встроены по умолчанию
  • конфигурация: настройки модуля «reallyall» добавлены к модулям разработчика в настройки «all»

Изменение рабочих настроек

Были сделаны значительные изменения в настройках конфигурации авторизации и другие небольшие конфигурационные изменения, которые требуют внесения правок в ваш конфигурационный файл 2.2 перед использованием его в 2.4.

Авторизация

Все конфигурационные файлы, использующие механизм авторизации, вероятно, придётся править.

Вам следует просмотреть Справочную информацию по Идентификации, Авторизации и Контролю доступа, особенно секцию Сразу после авторизации, которая объясняет новый механизм для контроля порядка в котором применяются директивы авторизации.

Директивы, контролирующие как модуль авторизации отвечает, когда авторизация не удалась, были удалены: а именно управляющие команды AuthzLDAPAuthoritative, AuthzDBDAuthoritative, AuthzDBMAuthoritative, AuthzGroupFileAuthoritative, AuthzUserAuthoritative и AuthzOwnerAuthoritative. Они были заменены более выразительными RequireAny, RequireNone и RequireAall.

Контроль доступа

В 2.2 контроль доступа базировался на клиентском имени компьютера, IP адресе и других характеристиках клиента, которые сравнивались с правилами установленными директивами Order, Allow, Deny и Satisfy.

В 2.4 такой контроль доступа выполнен в том же духе, что и проверки авторизации, т.е. с использованием модуля mod_authz_host. Старые идиомы следует заменить новым идентификационным механизмом, хотя сохранена совместимость старых настроек с новым модулем mod_access_compat .

Здесь несколько примеров нового и старого способов установления одинаковых правил доступа.

В этом примере все запросы отклоняются

2.2 конфигурация:

Order deny,allow
Deny from all

2.4 конфигурация:

Require all denied

В этом примере все запросы разрешены

2.2 конфигурация:

Order allow,deny
Allow from all

2.4 конфигурация:

Require all granted

В этом примере, все хосты для домена example.org разрешены, ко всем другим хостам – доступ закрыт.

2.2 конфигурация:

Order Deny,Allow
Deny from all
Allow from example.org

2.4 конфигурация:

Require host example.org

Другие конфигурационные изменения

Некоторые маленькие корректировки могут быть необходимыми для особых случаев, описанных ниже.

  • MaxRequestsPerChild был переименован MaxConnectionsPerChild, это более точно отражает суть. Старое имя всё ещё поддерживается.
  • MaxClients был переименован в MaxRequestWorkers, это более точно отражает суть. Для асинхронных MPMs, как например событие, максимальное количество клиентов не является эквивалентом количества рабочих процессов. Старое имя всё ещё поддерживается.
  • Деректива DefaultType больше не имеет какого либо эффекта, разве что показывает предупреждение, если она используется с любой величиной, кроме none. Вам следует использовать другие конфигурационные настройки для замены в 2.4.
  • EnableSendfile сейчас по умолчанию установлена на Off.
  • FileETag по умолчанию сейчас «MTime Size» (без INode).
  • mod_log_config: ${cookie}C соответствует полному имени cookie. Ранее, любая подстрока соответствовала.
  • mod_dav_fs: Формат файла DavLockDB изменён для систем с дескрипторами.  Старый файл DavLockDB должен быть удалён или обновлён.
  • KeepAlive принимает только значения On или Off. Раньше любые значения, отличные от «Off» или «0» были интерпретированы как «On».
  • Директивы AcceptMutex, LockFile, RewriteLock, SSLMutex, SSLStaplingMutex и WatchdogMutexPath были заменены единственной дерективой Mutex. В каждом отдельном случае следует определять, следует ли эти директивы просто удалить из файла настроек 2.2 или вместо них должна использоваться Mutex.
  • mod_cache: CacheIgnoreURLSessionIdentifiers сейчас сравнивает на точное совпадение, вместо частичного совпадения. Если ваша конфигурация использовала конкретную строку, например sessionid  для определения совпадения в /someapplication/image.gif;jsessionid=123456789, то вы будете должны заменить sessionid на полную строку, т.е. jsessionid.
  • mod_ldap: LDAPTrustedClientCert сейчас является только последовательной покаталоговой настройкой. Если вы используете эту директорию, пересмотрите вашу конфигурацию, чтобы убедиться, что она представлена во всех необходимых папках.
  • mod_filter: FilterProvider синтакс изменился и сейчас используется логическое (булевое) выражение для определения применим ли фильтр.
  • mod_include: 
    • выражение #if expr сейчас использует новый парсер. Старый синтакс может быть восстановлен директивой SSILegacyExprParser.
    • конфигурация директивы SSI* больше не приводит к тому, что все SSI* директивы в подкаталогах сбрасываются к их дефолтным значениям.
  • mod_charset_lite: Опция DebugLevel была удалена в пользу настройки в модуле LogLevel.
  • mod_ext_filter: Опция DebugLevel была удалена в пользу настройки в модуле LogLevel.
  • mod_ssl: основанные на CRL отмены проверок сейчас должны быть явно настроены в SSLCARevocationCheck.
  • mod_substitute: Максимальная длина строки теперь ограничена 1MB.
  • mod_reqtimeout: Если модуль загружен, теперь он будет устанавливать несколько таймаутов по умолчанию.

Разные изменения

  • mod_autoindex: теперь точно называет и отображает описание для файлов .xhtml, которые раньше игнорировались.
  • mod_ssl: дефолтный формат величин *_DN изменён. Старый формат может всё ещё использоваться с новым аргументом LegacyDNStringFormat в to SSLOptions. Протокол SSLv2 больше не поддерживается. SSLProxyCheckPeerCN и SSLProxyCheckPeerExpire сейчас по умолчанию установлены в On, что при прокси запросах к HTTPS хосту с плохими или устаревшими сертификатами будет приводить к ошибке 502 (Bad gateway).
  • htpasswd теперь использует MD5 хэш по умолчанию для всех платформ.
  • Деректива NameVirtualHost больше не имеет какого-либо эффекта, кроме отображения предупреждения. Любые комбинации адрес/пор появляющиеся во множественных виртуальных хостах безоговорочно трактуются как имя виртуального хоста.
  • mod_deflate сейчас пропускает сжатие, если известно, что размер добавляемых метаданных (заголовков) больше, чем размер сжимаемых данных.
  • Многоязычные документы ошибок из 2.2.x могут не работать, если они не приведены к новому синтаксу элементов mod_include’s #if expr= или если директива SSILegacyExprParser не включена для каталогов, содержащих документы ошибок.
  • Функциональность, обеспечиваемая mod_authn_alias в предыдущих версиях (например директивой AuthnProviderAlias) перемещена mod_authn_core.

Сторонние модули

Все модули должны быть перекомпилированы для 2.4 перед загрузкой.

Много сторонних модулей созданных для версии 2.2 будут работать без внесения дополнительных изменений с сервером Apache HTTP версии 2.4. Некоторые могут потребовать изменений, обратитесь к обзору обновлений в API .

Общие проблемы при обновлении

  • Ошибки запуска: 
    • Invalid command ‘User’, perhaps misspelled or defined by a module not included in the server configuration – загрузите модуль mod_unixd
    • Invalid command ‘Require’, perhaps misspelled or defined by a module not included in the server configuration, or Invalid command ‘Order’, perhaps misspelled or defined by a module not included in the server configuration – загрузите модуль mod_access_compat, или обновите конфигурации в соответствии с синтаксисом директив авторизации версии 2.4.
    • Ignoring deprecated use of DefaultType in line NN of /path/to/httpd.conf — удалите DefaultType и заменить другими конфигурационными настройками.
  • Ошибки обработки запросов: 
    • configuration error: couldn’t check user: /path – загрузите модуль mod_authn_core.

Для описания всех изменений обратитесь к странице Новые функции.

Данная статья является переводом Upgrading to 2.4 from 2.2.


Следующим шагом, после настройки и тестирования сайта на локалхосте, является выбор качественного и дешёвого интернет хостинга. Я перебрал довольно много решений и нашёл очень хороший вариант — 100 рублей в месяц! За эти деньги даётся профессиональный хостинг, с отличным аптаймом, с бесплатным доменом второго уровня в подарок (!), с 2 гигабайтами места на SSD диске, с неограниченным количеством баз данных, с возможностью подключать неограниченное количество новых доменов (платить придётся только за каждый новый домен — 139 рублей). Вообще, всего хорошего так много, что проще всего посмотреть это здесь.

Кстати, а ведь как здорово иметь собственное доменное имя! Хотя бы для того, чтобы сделать для себя красивый почтовый ящик, вместо чего-нибудь вроде vovan_pupkin_murom1995@mail.ru. Вот здесь можно найти свой собственный домен. Например, я получил бесплатно домен codeby.net, я могу делать почтовые ящики: admin@codeby.net, alex@codeby.net, al@codeby.net и так далее — количество ящиков ничем не ограничено!

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

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *