Как настроить Apache HTTP с событием MPM и PHP-FPM на FreeBSD 12.0

_Автор выбрал Open Internet / Free Speech Fund для получения пожертвования в рамках https://do.co/w4do-cta [Писать для DOnations] программа.

Вступление

Веб-сервер Apache HTTP на протяжении многих лет развивался для работы в различных средах и решения различных задач. Как и любой веб-сервер, Apache HTTP должен решить одну важную проблему: как обрабатывать различные процессы для обслуживания запроса протокола HTTP. Это включает в себя открытие сокета, обработку запроса, сохранение соединения открытым в течение определенного периода, обработку новых событий, происходящих через это соединение, и возврат содержимого, созданного программой, созданной на определенном языке (например, PHP, Perl или Python) , Эти задачи выполняются и контролируются Multi-Processing Module (MPM).

Apache HTTP поставляется с тремя разными MPM:

  • * Pre-fork *: новый процесс создается для каждого входящего соединения, достигающего сервера. Каждый процесс изолирован от других, поэтому между ними нет общей памяти, даже если они выполняют идентичные вызовы в какой-то момент своего выполнения. Это безопасный способ запуска приложений, связанных с библиотеками, которые не поддерживают многопоточность - как правило, старые приложения или библиотеки.

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

  • * Событие *: в зависимости от работника этот MPM идет на шаг вперед, оптимизируя то, как родительский процесс планирует задачи для дочерних процессов и потоков, связанных с ними. По умолчанию соединение остается открытым в течение 5 секунд и закрывается, если не происходит никакого нового события; это значение по умолчанию директивы keep-alive, которое сохраняет связанный с ним поток. Event MPM позволяет процессу управлять потоками, так что некоторые потоки могут свободно обрабатывать новые входящие соединения, в то время как другие остаются привязанными к действующим соединениям. Разрешение перераспределения назначенных задач потокам улучшит использование ресурсов и производительность.

Модуль MPM Event - это быстрый модуль мультиобработки, доступный на веб-сервере Apache HTTP.

PHP-FPM - менеджер процессов FastCGI для PHP. Протокол FastCGI основан на Common Gateway Interface (CGI), протоколе, который устанавливается между приложениями и веб-серверами, такими как Apache HTTP. Это позволяет разработчикам писать приложения отдельно от поведения веб-серверов. Программы запускают свои процессы независимо и передают свой продукт на веб-сервер по этому протоколу. Каждое новое соединение, нуждающееся в обработке приложением, создает новый процесс.

Комбинируя событие MPM в Apache HTTP с PHP FastCGI Process Manager (PHP-FPM), веб-сайт может загружаться быстрее и обрабатывать больше параллельных соединений, используя меньше ресурсов.

В этом руководстве вы улучшите производительность https://www.digitalocean.com/community/tutorials/how-to-install-an-apache-mysql-and-php-famp-stack-on-freebsd-12- 0 [стек FAMP], изменив модуль мультиобработки по умолчанию с предварительного форка на событие и используя менеджер процессов PHP-FPM для обработки кода PHP вместо классического + mod_php + в Apache HTTP.

Предпосылки

Прежде чем начать это руководство, вам понадобится следующее:

Шаг 1 - Замена модуля мультиобработки

Вы начнете с поиска директивы pre-fork в файле + httpd.conf +. Это основной файл конфигурации для Apache HTTP, в котором вы можете включать и отключать модули. Вы можете редактировать и устанавливать директивы, такие как порт прослушивания, где Apache HTTP будет обслуживать контент, или расположение контента для отображения в этом файле.

Чтобы внести эти изменения, вы будете использовать + nl +, номерную строку, программу с флагом + -ba + для подсчета и нумерации строк, чтобы на последующем этапе ничего не было несовместимо. В сочетании с + grep + эта команда сначала подсчитает все строки в файле, указанном в пути, и по окончании будет искать строку символов, которую вы ищете.

Выполните следующую команду, чтобы программа + nl + обработала и пронумеровала строки в + httpd.conf +. Затем + grep + обработает вывод путем поиска заданной строки символов + 'mod_mpm_prefork' +:

nl -ba /usr/local/etc/apache24/httpd.conf | grep 'mod_mpm_prefork'

В качестве результата вы увидите нечто похожее на:

Output  LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so

Давайте отредактируем строку с вашим текстовым редактором. В этом руководстве вы будете использовать + vi +, который является редактором по умолчанию во FreeBSD:

sudo vi + /usr/local/etc/apache24/httpd.conf

Добавьте символ + # + в начале строки, чтобы эта строка была закомментирована следующим образом:

/usr/local/etc/apache24/httpd.conf

...
# LoadModule mpm_prefork_module libexec/apache24/mod_mpm_prefork.so
...

Добавив символ «+ # +», вы отключили модуль MPM предварительной форки.

Теперь вы найдете директиву события в том же файле + httpd.conf.

nl -ba /usr/local/etc/apache24/httpd.conf | grep mpm_event

Вы увидите вывод, похожий на следующий:

Output...
 #LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
...

Теперь вы удалите символ + # + в строке, чтобы включить Event MPM:

sudo vi + /usr/local/etc/apache24/httpd.conf

Директива теперь будет выглядеть следующим образом:

/usr/local/etc/apache24/httpd.conf

...
LoadModule mpm_event_module libexec/apache24/mod_mpm_event.so
...

Теперь, когда вы переключили конфигурацию с предварительного форка MPM на событие, вы можете удалить пакет + mod_php73 +, соединяющий процессор PHP с Apache HTTP, поскольку он больше не нужен и будет мешать, если он останется в системе:

sudo pkg remove -y mod_php73

Убедитесь в правильности конфигурации, выполнив следующую команду для проверки:

sudo apachectl configtest

Если вы видите + Синтаксис OK + в своем выводе, вы можете перезапустить сервер Apache HTTP:

sudo apachectl restart

Вы переключили MPM с предварительного форка на событие и удалили модуль + mod_php73 +, подключающий PHP к Apache HTTP. На следующем шаге вы установите модуль PHP-FPM и настроите Apache HTTP, чтобы он мог быстрее связываться с PHP.

Шаг 2 - Настройка Apache HTTP для использования FastCGI Process Manager

FreeBSD имеет несколько поддерживаемых версий PHP, которые вы можете установить через менеджер пакетов. В FreeBSD различные двоичные файлы различных доступных версий компилируются вместо использования только одной, как большинство дистрибутивов GNU / Linux, в своих репозиториях по умолчанию. Чтобы следовать рекомендациям, вы будете использовать поддерживаемую версию, которую вы можете проверить на странице поддерживаемых версий PHP.

На этом шаге вы добавите PHP-FPM в качестве запущенной службы для запуска при загрузке. Вы также сконфигурируете Apache HTTP для работы с PHP, добавив выделенную конфигурацию для модуля, а также включив некоторые дополнительные модули в + httpd.conf +.

Сначала вы добавите + 'php_fpm_enable = YES' + в файл + / etc / rc.conf +, чтобы можно было запустить службу PHP-FPM. Вы сделаете это с помощью команды + sysrc +:

sudo sysrc php_fpm_enable="YES"

Теперь вы добавите модуль + php-fpm + в каталог модуля Apache, чтобы он был настроен для использования Apache HTTP. Для этого создайте следующий файл:

sudo vi /usr/local/etc/apache24/modules.d/030_php-fpm.conf

Добавьте следующее в + 030_php-fpm.conf +:

/usr/local/etc/apache24/modules.d/030_php-fpm.conf

<IfModule proxy_fcgi_module>
   <IfModule dir_module>
       DirectoryIndex index.php
   </IfModule>
   <FilesMatch "\.(php|phtml|inc)$">
       SetHandler "proxy:fcgi://127.0.0.1:9000"
   </FilesMatch>
</IfModule>

Это говорит о том, что если модуль + 'proxy_fcgi' + включен, а также + 'dir_module' +, то любые обработанные файлы, соответствующие расширениям в скобках, должны обрабатываться диспетчером процессов FastCGI, работающим на локальной машине через порт. + 9000 + - как если бы локальная машина была прокси-сервером. Это где модуль PHP-FPM и Apache HTTP взаимосвязаны. Для этого вы активируете дополнительные модули на этом шаге.

Чтобы включить прокси-модуль, сначала найдите его в файле + httpd.conf +:

nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy.so

Вы увидите вывод, похожий на следующий:

Output...
#LoadModule proxy_module libexec/apache24/mod_proxy.so
...

Вы раскомментируете строку, удалив символ + # +:

sudo vi + /usr/local/etc/apache24/httpd.conf

После редактирования строка будет выглядеть следующим образом:

/usr/local/etc/apache24/httpd.conf

...
LoadModule proxy_module libexec/apache24/mod_proxy.so
...

Теперь вы можете активировать модуль FastCGI. Найдите модуль с помощью следующей команды:

nl -ba /usr/local/etc/apache24/httpd.conf | grep mod_proxy_fcgi.so

Вы увидите нечто похожее на следующее:

Output...
#LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
...

Теперь раскомментируйте строку, как вы уже сделали с другими модулями:

sudo vi + /usr/local/etc/apache24/httpd.conf

Вы оставите строку следующим образом:

/usr/local/etc/apache24/httpd.conf

...
LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so
...

Как только это будет сделано, вы запустите службу PHP-FPM:

sudo service php-fpm start

И вы перезапустите Apache, чтобы он загрузил последние изменения конфигурации, включающие модуль PHP:

sudo apachectl restart

Вы установили модуль PHP-FPM, настроили работу с ним Apache HTTP, включили необходимые модули для работы протокола FastCGI и запустили соответствующие службы.

Теперь, когда в Apache включен модуль Event MPM, а PHP-FPM присутствует и работает, пришло время проверить, что все работает так, как задумано.

Шаг 3 - Проверка вашей конфигурации

Чтобы проверить, что изменения конфигурации были применены, вы запустите несколько тестов. Первый проверит, какой модуль многопроцессорной обработки использует Apache HTTP. Второй проверит, что PHP использует менеджер FPM.

Проверьте HTTP-сервер Apache, выполнив следующую команду:

sudo apachectl -M | grep 'mpm'

Ваш вывод будет следующим:

Outputmpm_event_module (shared)

Вы можете повторить то же самое для прокси-модуля и FastCGI:

sudo apachectl -M | grep 'proxy'

Результат покажет:

Outputproxy_module (shared)
proxy_fcgi_module (shared)

Если вы хотите просмотреть весь список модулей, вы можете удалить вторую часть команды после + -M +.

Настало время проверить, использует ли PHP диспетчер процессов FastCGI. Для этого вы напишите очень маленький PHP-скрипт, который покажет вам всю информацию, связанную с PHP.

Выполните следующую команду, чтобы написать файл с именем следующим образом:

sudo vi /usr/local/www/apache24/data/info.php

Добавьте следующее содержимое в файл info.php:

info.php

<?php phpinfo(); ?>

Теперь перейдите по URL вашего сервера и добавьте + info.php + в конце так: + http: /// info.php +.

Запись API сервера будет * FPM / FastCGI *.

изображение: https: //assets.digitalocean.com/articles/MPMEvent/FastCGIPHP.png [PHP экран записи API сервера FPM / FastCGI]

Не забудьте удалить файл + info.php после этой проверки, чтобы информация о сервере не была публично раскрыта.

sudo rm /usr/local/www/apache24/data/info.php

Вы проверили рабочее состояние модуля MPM, модули, обрабатывающие FastCGI, и обработку кода PHP.

Заключение

Вы оптимизировали свой исходный стек FAMP, поэтому число соединений для создания новых процессов Apache HTTP увеличилось, PHP-FPM будет более эффективно обрабатывать код PHP и улучшилось общее использование ресурсов.

Обратитесь к проекту HTTP-сервера Apache documentation для получения дополнительной информации о различных модулях и связанных проектах.

Related