Как настроить Apache и PHP для сайтов с высокой посещаемостью на сервере Linux

Рекомендуемый Apache Php Fpm

Почти в каждом руководстве по установке стека LAMP (Linux, Apache, MySQL, PHP) рекомендуется использовать встроенный модуль Apache для обработки сценариев PHP. Например, в Ubuntu вы можете включить это, используя такую ​​команду, как sudo apt install libapache2-mod-php для установки пакета. Это, в свою очередь, заставит Apache использовать mpm_prefork. Каждый раз, когда посетитель заходит на ваш сайт, запускается новый процесс для обработки этого соединения. Это хорошо работает при низком трафике.

Но это становится огромной проблемой, если вы получаете внезапный всплеск трафика. Например, сообщение Reddit может включать ваш веб-сайт, и если сообщение станет популярным, вы можете привлечь тысячи посетителей всего за несколько минут.

В лучшем случае, если Apache сможет справиться с всплеском трафика, некоторым незадачливым посетителям, возможно, придется подождать от 30 до 60 секунд, пока страница загрузится, что абсурдно в современном мире. В худшем случае сервер начнет сильно отставать, и некоторые соединения будут просто разорваны из-за нехватки ресурсов. В этом случае посетители увидят ошибку в своих браузерах.

В любом случае это не лучший сценарий, поскольку вы потенциально потеряли внимание сотен или тысяч заинтересованных читателей, клиентов или поклонников.

К сожалению, PHP в любом случае требует значительных ресурсов. Но с mpm_event Apache может обрабатывать внезапные всплески трафика гораздо более эффективным способом. Однако рекомендуется, чтобы на вашем сервере было не менее 2 ГБ ОЗУ и 2 ядра ЦП, реальных или виртуальных, и даже больше, если вы ожидаете интенсивных скачков трафика, например, более десяти посетителей в секунду. Если вы используете виртуальный частный сервер, добавьте больше виртуальных ядер ЦП и SSD-хранилище. Оперативная память вторична.

Как использовать событие Apache MPM и PHP-FPM в дистрибутивах на основе Debian

В Debian, Ubuntu или других дистрибутивах этого семейства просто избегайте установки пакета "libapache2-mod-php". Когда вы устанавливаете Apache, он по умолчанию использует событие MPM. Но после установки упомянутого пакета сценарий отключает событие MPM и включает предварительную подготовку MPM. Модуль Apache PHP может работать (безопасно) только с mpm_prefork. Конечно, без "libapache2-mod-php" у вас не будет процессора для файлов PHP. Таким образом, вы будете использовать PHP-FPM вместо модуля PHP, включенного в Apache. Вот как вы установите стек LAMP на новый сервер. Вы можете адаптировать шаги в соответствии с требованиями вашего веб-приложения.

Сначала войдите в систему как root. Затем установите Apache.

На этом этапе вы можете видеть, что Apache действительно поставляется с включенным по умолчанию событием MPM.

Apache Php Fpm Проверить Mpm Debian

Установите PHP-FPM.

Вы увидите инструкции о том, как включить процессор PHP в Apache.

Apache Php Fpm Включить инструкции Php

Включите протокол FastCGI.

Включите конфигурацию PHP-FPM по умолчанию для Apache.

Примечание: в будущих версиях Debian / Ubuntu эта команда может измениться на что-то другое, например a2enconf php7.6-fpm, потому что PHP-FPM будет другой версией.

Перезагрузите Apache.

Установите остальные требования для вашего PHP-приложения. Вот пример:

Это установит сервер базы данных и модуль PHP MySQL, чтобы ваше приложение PHP могло подключаться к базе данных.

Как использовать событие Apache MPM и PHP-FPM в дистрибутивах на основе RedHat

Другой популярный выбор серверного дистрибутива - RedHat или CentOS. Таким же образом, как и выше, будет предложен пример чистой установки Apache с включенным событием MPM и PHP-FPM.

Войдите в систему как root и установите Apache.

В отличие от дистрибутивов на основе Debian, здесь вы увидите, что Apache по умолчанию использует предварительный форк MPM, по крайней мере, в последней версии CentOS 7, доступной на момент написания.

Apache Php Fpm Проверить Mpm Centos

Чтобы включить событие MPM, вам необходимо отредактировать файл конфигурации.

Это добавит знак # для комментирования (деактивации) строки LoadModule mpm_prefork_module modules / mod_mpm_prefork.so.

Apache Php Fpm Mpm Conffile на Centos

Теперь раскомментируйте (активируйте) строку #LoadModule mpm_event_module modules / mod_mpm_event.so, удалив предыдущий знак # следующей командой.

Запустите Apache и включите его автозапуск при загрузке.

Проверьте, использует ли теперь Apache событие MPM.

Статус включения события Apache Php Fpm Mpm Centos

Установите модуль PHP-FPM и FastCGI.

Создайте "/etc/httpd/conf.d/php.conf", чтобы указать Apache, как обрабатывать файлы PHP. Скопируйте ВСЕ содержимое ниже и вставьте все сразу в терминал, затем нажмите ENTER.

Заслуга за эту великолепную конфигурацию принадлежит Debian. Другие источники рекомендуют простой файл конфигурации, например:

SetHandler "proxy:fcgi://127.0.0.1:9000"

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

Перезагрузите Apache.

Запустите PHP-FPM и включите его автозапуск при загрузке.

Заключение

Теперь у вас есть сервер Apache, который намного лучше масштабируется с трафиком. Однако помните, что вы используете настройки по умолчанию, как в "лучших" для большинства людей. Если вы действительно хотите получить максимальную отдачу от своего HTTP-сервера, вам следует прочитать о различных переменных, которые вы можете настроить. Правильные значения для них во многом зависят от ресурсов вашего сервера, ожидаемого трафика и приложения PHP.