Веб-серевер Apache является универсальным решением для обслуживания HTTP-запросов и обработки веб-контента. Практически для всех дистрибутивов Linux он поставляется готовым не просто для базового использования, но и позволяет организовать полноценный хостинг как минимум для ведения разработки веб-приложений. Однако, Apache всегда отличался тем, что для наиболее полного раскрытия его возможностей и потенциала он требует довольно щепетильного конфигурирования и оптимизации. Это является одновременно и недостатком и плюсом. Поскольку только таким образом можно добиться от Apache максимальной эффективности для любой специфики задач. По этой же причине (сложность настройки и оптимизации) был разработан высокопроизводительный «из коробки» веб-сервер NGINX. Ещё одним плюсом Apache является поддержка подключаемых модулей. Что делает его легко масштабируемым и позволяет адаптировать под различные задачи. Самих же модулей Apache существует огромное количество. А свободная архитектура и подробная документация позволяют разрабатывать свои собственные модули.
Зачем нужны модули Apache
Разработчики Apache вряд ли могут предусмотреть все потребности, возникающие в процессе развития веб-технологий. В такой ситуации рационально осуществлять поддержку расширения функционала с помощью отдельных подключаемых программных компонентов — модулей. Каждый модуль добавляет к базовому или текущему функционалу веб-сервера новые возможности. Таким образом, модули Apache позволяют легко оснащать его необходимыми возможностями. В то же время, если отпадает необходимость в использовании какого-либо модуля — его легко отключить. Экономя на потребляемых ресурсах.
Такой подход удобен также и тем, что модули можно (и легко) разрабатывать отдельно. Без затрагивания основного кода ядра Apache.
Как работает механизм подключения модулей?
Модули Apache представляют собой программное обеспечение (ПО) в виде динамически подключаемых библиотек — файлов с расширением *.so. Хранятся эти модули (т. е. библиотеки *.so) обычно там же, где и все библиотеки систем Linux – в каталоге /usr/lib. В котором конкретно для модулей Apache предусмотрен подкаталог apache/modules.
Установка же модуля подразумевает подключение файла библиотеки (модуль *.so) к конфигурации Apache. Чтобы он мог использовать функции, реализованные и содержащиеся в файле модуля. Подключение происходит при помощи специальных инструкций в виде директив конфигурации. Эти инструкции содержатся в конфигурационных файлах *.load и *.conf. Которые подключают модуль и определяют конфигурацию его работы соответственно.
Чтобы Apache «знал», что нужно подключить модуль, его конфигурационные файлы (модуля) должны быть в специальном каталоге /etc/apache2/mods-available
. А для того, чтобы Apache «знал», как именно подключить модуль. В специальном каталоге /etc/apache2/mods-enabled
должны существовать символические ссылки на соответствующие конфигурационные файлы из каталога /etc/apache2/mods-available
. Наличие такой ссылки и позволяет Apache подключать дополнительные функции библиотек «из вне». При условии, что они совместимы и корректно задана конфигурация подключения.
Подобная схема подключения по принципу раздельного хранения файлов библиотек модулей, их конфигурационных файлов и связывания их символическими ссылками позволяет легко ориентироваться в конфигурации и управлять ей. Фактически подключение модулей осуществляется на уровне файловой системы (ФС). Которая представляет собой унифицированный интерфейс для этого.
Включение и отключение модулей
Подавляющее большинство модулей Apache поставляются в стандартных репозиториях практически любого дистрибутива Linux. Для их установки и подключения нужно просто воспользоваться системой управления пакетами (СУП) дистрибутива. Например, в Ubuntu для установки модуля FastCGI следует выполнить следующую команду:
$ sudo apt install libapache2-mod-fcgid
Сами модули нетрудно отыскать в репозиториях по ключевым словам, например для СУП APT в Ubuntu это выглядит так:
apt-cache search fcgi apache2-utils - Apache HTTP Server (utility programs for web servers) libcgi-fast-perl - CGI subclass for work with FCGI libfcgi-perl - helper module for FastCGI python-paste - tools for using a Web Server Gateway Interface stack - Python 2.x python-paste-doc - tools for using a Web Server Gateway Interface stack - documentation python3-paste - tools for using a Web Server Gateway Interface stack - Python 3.x chiark-utils-bin - chiark system administration utilities fcgiwrap - simple server to run CGI applications over FastCGI libanyevent-fcgi-perl - Perl non-blocking FastCGI server libapache2-mod-fcgid - FastCGI interface module for Apache 2 libapache2-mod-fcgid-dbg - debugging symbols for mod_fcgid
В данном выводе пакет libapache2-mod-fcgid, как следует из его описания, и является искомым вариантом. После установки модуля нужно перезапустить Apache.
Но когда использование СУП или менеджера пакетов для установки не представляется возможным, например, когда разрабатывается собственный модуль, то необходимо выполнить вручную порядок действий, соответствующий механизму подключения, описанному в предыдущей главе:
- скопировать файл библиотеки модуля в /usr/lib/apache/modules;
- создать конфигурационный файл module_name.load в каталоге /etc/apache2/mods-available;
- в каталоге /etc/apache2/mods-enabled создать символическую ссылку на файл module_name.load из каталога /etc/apache2/mods-available;
- перезапустить веб-сервер Apache, либо перезагрузить его конфигурацию.
Содержимое файла конфигурации module_name.load (имя задано условно) представляет собой, как уже было отмечено, определение директивы загрузки функций из файла библиотеки модуля (условно name_module.so) по соответствующему пути:
LoadModule name_module /usr/lib/apache/modules/name_module.so
Во время запуска (или перезагрузки конфигурации) Apache «просматривает» каталог /etc/apache2/mods-enabled
, и по имеющимся в нём символическим ссылкам читает соответствующие файлы конфигурации из каталога /etc/apache2/mods-available
. Содержащаяся в них директива LoadModule указывает Apache загрузить соответствующий модуль в свое адресное пространство.
Очевидно, что для отключения модулей нужно просто удалить соответствующую символическую ссылку в каталоге mods-enabled, а также перезапустить веб-сервер.
В некоторых дистрибутивах для удобства управления модулями и вообще конфигурацией Apache предоставляются утилиты, например из пакета apache2-utils. Этот пакет предоставляет команды, позволяющие быстро подключать и отключать модули: a2enmod и a2dismod соответственно. Например:
$ sudo a2enmodule mpm_itk
Эта команда включит модуль mpm-itk. При этом библиотека модуля и соответствующий конфигурационный файл mpm_itk.load уже должны присутствовать в системе.
В заключение необходимо отметить, что на примере установки дополнительных модулей Apache видно, что этот процесс далеко не самый быстрый и простой. Однако все действия абсолютно логичны, а потому легко усваиваются, избавляя от необходимости что-то запоминать или часто обращаться к справочным руководствам.