Автор выбрал 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.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.