ГлавнаяОперационные системыLinuxКак настроить Apache и PHP для веб-сайтов с высоким трафиком на сервере...

Как настроить Apache и PHP для веб-сайтов с высоким трафиком на сервере Linux

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

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

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

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

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

Читайте также: Nginx против Apache: что вам больше подходит?

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

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

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

apt update && apt install apache2

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

apachectl -V

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

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

apt install php-fpm

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

Инструкции по включению PHP Fpm Apache

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

a2enmod proxy_fcgi

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

a2enconf php7.0-fpm

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

Перезапустите Apache.

systemctl restart apache2

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

apt install mariadb-server php-mysql

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

Читайте также: Как защититься от DDoS с помощью Mod_evasive на сервере Apache

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

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

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

yum install httpd

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

apachectl -V

Apache Php Fpm Проверка Mpm Centos

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

sed -i '/mpm_prefork\.so$/s/^/#/' /etc/httpd/conf.modules.d/00-mpm.conf

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

Конфигурация Apache Php Fpm Mpm на Centos

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

sed -i '/mpm_event\.so$/s/^#//' /etc/httpd/conf.modules.d/00-mpm.conf

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

systemctl start httpd.service
systemctl enable httpd.service

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

apachectl -V

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

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

yum install php-fpm mod_fcgid

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

cat <<PASTE > /etc/httpd/conf.d/php.conf
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
 
<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
#SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
<FilesMatch ".+\.phps$">
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[3457]?|t|tml|ps)$">
Require all denied
</FilesMatch>
</IfModule>
</IfModule>
PASTE

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

<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

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

Перезапустите Apache.

systemctl restart httpd.service

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

systemctl start php-fpm.service
systemctl enable php-fpm.service

Заключение

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

ПОХОЖИЕ СТАТЬИ

Популярные записи