Автор выбрал COVID-19 Relief Fund для получения пожертвования в рамках программы Write for DOnations.
Веб-сервер Apache HTTP эволюционировал все это время и теперь позволяет работать в разных средах и решать разные задачи. Важной проблемой, которую должен решать Apache HTTP, как и любой веб-сервер, является управление различными процессами для обслуживания запросов протокола http. Это подразумевает открытие сокета, обработку запроса, поддержание открытого подключения на определенный период, обработку новых событий, возникающих во время этого подключения, а также возврат контента, произведенного программой на определенном языке (например PHP, Perl или Python). Эти задачи выполняются и контролируются мультипроцессными модулями (MPM).
Apache HTTP поставляется с тремя различными MPM:
Модуль MPM Event — это быстрый мультипроцессный модуль, доступный на веб-сервере Apache HTTP.
PHP-FPM — диспетчер процессов FastCGI для PHP. Протокол FastCGI основан на интерфейсе стандарта CGI (интерфейс общего шлюза), протоколе, который находится между приложениями и веб-серверами, например Apache HTTP. Это позволяет разработчикам писать приложения независимо от поведения веб-серверов. Программы запускают свои процессы независимо и передают свой продукт на веб-сервер посредством этого протокола. Каждое новое подключение, которое нуждается в обработке приложением, создаст новый процесс.
При сочетании MPM Event в Apache HTTP с диспетчером процессов PHP FastCGI (PHP-FPM) веб-сайт может выполнять загрузку быстрее и обрабатывать больше одновременных подключений и при этом использовать меньше ресурсов.
В этом обучающем модуле мы повысим производительность стека LAMP путем изменения мультипроцессного модуля с pre-fork на event и использования диспетчера процессов PHP-FPM для обработки кода PHP вместо классического mod_php
в Apache HTTP.
Для прохождения этого обучающего руководства вам потребуется следующее:
Ubuntu наследует скрипты для включения или отключения модулей Apache HTTP из его родительского дистрибутива Debian. Вы будете использовать этот набор инструментов на этом этапе для отключения модуля Pre-fork и включения модуля Event.
В этом шаге вы остановите Apache HTTP, отключите модуль PHP 7.2
, привязанный к модулю Pre-fork, и затем отключите Pre-fork, чтобы сразу же включить модуль Event.
Вначале вы остановите службу Apache HTTP:
- sudo systemctl stop apache2
Теперь вы можете отключить модуль PHP 7.2
, который связан с модулем Pre-fork:
- sudo a2dismod php7.2
Затем отключите модуль MPM Pre-fork:
- sudo a2dismod mpm_prefork
Теперь активируйте модуль MPM Event:
- sudo a2enmod mpm_event
Вы изменили MPM с pre-fork на event и удалили соединение модуля PHP 7.2
между PHP и Apache HTTP. В следующем шаге вы установите модуль php-fpm
, а также связанные библиотеки и прокси-модули. Вы настроите Apache HTTP, чтобы он мог взаимодействовать также с PHP.
На этом этапе вы изменили способ подключений процессов Apache HTTP, переключив MPM Pre-fork на Event. Однако вы также отключили модуль PHP, который соединял Apache HTTP со всеми программами, выполняемыми на PHP.
На этом этапе вы установите процессор PHP-FPM, чтобы Apache HTTP опять смог обрабатывать программы PHP. Также вы установите библиотеки зависимостей и активируйте модули, чтобы они могли работать более слаженно и быстро, чем ранее.
Вначале установите php-fpm
. Следующая команда установит пакет PHP-FPM, и он автоматически активирует службу php7.2-fpm
, интегрированную с systemd, чтобы служба запускалась во время загрузки:
- sudo apt install php-fpm
Для обмена данными для Apache HTTP и PHP потребуется библиотека, обеспечивающая эту возможность. Теперь вы установите libapache2-mod-fcgid
, который может служить интерфейсом между программами с веб-серверами и является характерным для Apache HTTP. Этот обмен данными будет происходить через сокет UNIX.
Установите эту библиотеку:
- sudo apt install libapache2-mod-fcgid
Вы установили php-fpm
и libapache2-mod-fcgid
, но они еще не активированы.
Вначале активируйте модуль php-fpm
с помощью следующей команды:
- sudo a2enconf php7.2-fpm
Затем активируйте модуль proxy
Apache HTTP:
- sudo a2enmod proxy
Теперь активируйте модуль proxy
FastCGI в Apache HTTP:
- sudo a2enmod proxy_fcgi
Примечание. Вы можете прочитать конфигурацию этого взаимодействия между программами PHP и Apache HTTP через сокет UNIX с помощью следующего:
- cat /etc/apache2/conf-enabled/php7.2-fpm.conf
Теперь все готово, и можно запускать Apache HTTP. Сначала выполните проверку конфигурации:
- sudo apachectl configtest
OutputSyntax OK
После этого можно перейти к повторному запуску Apache HTTP, поскольку он был автоматически запущен при установке библиотеки FastCGI libapache2-mod-fcgid
:
- sudo systemctl restart apache2
Вы установили модуль php-fpm
, настроили Apache HTTP для работы с ним, активировали необходимые модули для работы протокола FastCGI, а также запустили соответствующие службы.
Теперь Apache имеет активированный модуль MPM Event, присутствует и работает PHP-FPM, и сейчас самое время проверить, что все работает должным образом.
Чтобы проверить, что изменения конфигурации вступили в силу, вы выполните несколько тестов. Первый проверит, какой мультипроцессный модуль использует Apache HTTP. Второй проверит, что PHP использует менеджер FPM.
Проверьте сервер Apache HTTP, выполнив следующую команду:
- sudo apachectl -M | grep 'mpm'
Вывод будет выглядеть следующим образом:
Outputmpm_event_module (shared)
Вы можете повторить то же самое для модуля proxy
и FastCGI:
- sudo apachectl -M | grep 'proxy'
Результат будет выглядеть так:
Outputproxy_module (shared)
proxy_fcgi_module (shared)
Если вы хотите увидеть весь список модулей, можно удалить вторую часть команды после -M
.
Теперь пришло время проверить, использует ли PHP диспетчер процессов FastCGI. Для этого вы напишете небольшой скрипт PHP, который покажет вам всю информацию, связанную с PHP.
Запустите следующую команду, чтобы написать файл с именем:
- sudo nano /var/www/your_domain/info.php
Добавьте в файл info.php
следующие строки:
<?php phpinfo(); ?>
Теперь откройте URL-адрес вашего сервера и добавьте info.php
в конец следующим образом: http://your_domain/info.php
.
Запись API сервера будет FPM/FastCGI.
Удалите файл info.php
после этой проверки, чтобы в общем доступе не отображалась никакая информация о сервере:
- sudo rm /var/www/yourdomain.com/info.php
Вы проверили рабочий статус модуля MPM, модули, обрабатывающие FastCGI, а также обработку кода PHP.
Вы оптимизировали стек LAMP, поэтому количество подключений для создания новых процессов Apache HTTP увеличилось, PHP-FPM обрабатывает код PHP более эффективно, и в общем ресурсы стали использоваться рациональнее.
Дополнительную информацию о разных модулях и связанных проектах можно найти в документации по проекту сервера Apache HTTP.
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.
Sign upClick below to sign up and get $100 of credit to try our products over 60 days!