- Home »

PHP-FPM и Nginx — настройка и руководство
Если ты когда-нибудь запускал сайт на PHP, то наверняка сталкивался с вопросом: как заставить его работать быстро, стабильно и без лишних танцев с бубном? Вот тут на сцену выходят два старых добрых друга — Nginx и PHP-FPM. Эта статья — не очередной пересказ мануалов, а подробное, гиковское, но простое руководство: что это за звери, как их подружить, как не наступить на грабли и выжать максимум. Будет полезно, если ты хочешь поднять свой сервер, не платить лишнего за хостинг, или просто разобраться, почему твой сайт тормозит. Всё с примерами, схемами, реальными кейсами и советами, которые экономят время и нервы.
Как это работает: магия PHP-FPM и Nginx
Давай разберёмся, что тут вообще происходит. Nginx — это веб-сервер, который отлично справляется с раздачей статики, балансировкой нагрузки и проксированием. Но вот с PHP он напрямую не работает. Для этого нужен отдельный процесс — PHP-FPM (FastCGI Process Manager). Он запускает пул воркеров, которые обрабатывают PHP-скрипты по запросу от Nginx.
- Nginx принимает HTTP-запросы, отдаёт статику (картинки, CSS, JS) сам, а всё, что заканчивается на
.php
, отправляет на PHP-FPM. - PHP-FPM — это менеджер процессов, который держит пул воркеров, готовых обрабатывать PHP-код. Работает через FastCGI-протокол.
- Вместе они обеспечивают быструю, масштабируемую и надёжную работу PHP-приложений.
Почему это важно? Потому что стандартный mod_php
в Apache — это прошлый век: он жрёт память, плохо масштабируется и не дружит с современными нагрузками. Nginx + PHP-FPM — это современный стандарт для производительных сайтов, от WordPress до Laravel.
Быстрая и простая настройка: шаг за шагом
Переходим к самому вкусному — как всё это поднять и не сломать себе мозг. Я покажу на примере Ubuntu (но на CentOS/RHEL/Fedora всё похоже).
1. Установка Nginx и PHP-FPM
sudo apt update
sudo apt install nginx php-fpm
Проверь, что всё установилось:
nginx -v
php-fpm7.4 -v # или php-fpm8.1 -v, зависит от версии
2. Настройка PHP-FPM
Открываем конфиг пула (обычно /etc/php/7.4/fpm/pool.d/www.conf
или аналогичный для твоей версии):
sudo nano /etc/php/7.4/fpm/pool.d/www.conf
- listen — по умолчанию
/run/php/php7.4-fpm.sock
(Unix socket). Можно поменять на порт, например127.0.0.1:9000
, если хочешь использовать TCP. - user и group — под каким пользователем работает пул. Обычно
www-data
. - pm — режим управления процессами:
dynamic
,static
,ondemand
. Для большинства сайтов подходитdynamic
. - pm.max_children — максимальное число воркеров. Не ставь слишком много — иначе сервер уйдёт в swap.
После изменений — не забудь перезапустить PHP-FPM:
sudo systemctl restart php7.4-fpm
3. Настройка Nginx для работы с PHP-FPM
Открываем конфиг сайта (например, /etc/nginx/sites-available/default
):
sudo nano /etc/nginx/sites-available/default
Добавляем (или редактируем) секцию для PHP:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock; # или 127.0.0.1:9000
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Проверь конфиг и перезапусти Nginx:
sudo nginx -t
sudo systemctl reload nginx
4. Проверка работы
Создай файл info.php
в корне сайта:
echo "<?php phpinfo(); ?>" > /var/www/html/info.php
Открой http://your-server/info.php
— если видишь страницу с информацией о PHP, всё работает!
Примеры, схемы, практические советы
Схема взаимодействия
[Клиент] → [Nginx] → [PHP-FPM] → [PHP-скрипт] ↑ [Статика (CSS, JS, img)]
Положительный кейс: быстрый WordPress
- WordPress на Nginx + PHP-FPM летает по сравнению с Apache.
- Меньше потребление памяти, выше производительность.
- Легко масштабировать: можно вынести PHP-FPM на отдельный сервер.
Отрицательный кейс: неправильная настройка пула
- Поставил
pm.max_children = 50
на сервере с 1 ГБ ОЗУ — сервер ушёл в swap, сайт стал тормозить. - Рекомендация: рассчитывай число воркеров по формуле:
max_children = (ОЗУ - память ОС и Nginx) / среднее потребление одного воркера
.
Таблица сравнения: Apache vs Nginx + PHP-FPM
Критерий | Apache (mod_php) | Nginx + PHP-FPM |
---|---|---|
Производительность | Средняя | Высокая |
Потребление памяти | Высокое | Низкое |
Масштабируемость | Плохо | Отлично |
Гибкость настройки | Средняя | Высокая |
Поддержка статики | Посредственно | Отлично |
Похожие решения, программы и утилиты
- Apache + mod_php — классика, но устаревшая. Не рекомендую для новых проектов.
- Apache + PHP-FPM — можно, но зачем, если есть Nginx?
- Caddy — современный веб-сервер с автоматическим HTTPS, поддерживает PHP через FastCGI.
- OpenLiteSpeed — альтернатива Nginx, тоже работает с PHP через LSAPI/FastCGI.
Для мониторинга и отладки рекомендую:
- meminfo — мониторинг памяти PHP-FPM воркеров.
- Ajenti — веб-панель для управления сервером.
- Официальная документация Nginx
- Официальная документация PHP-FPM
Статистика и сравнение с другими решениями
- По тестам NGINX, связка Nginx + PHP-FPM выдерживает в 2-3 раза больше запросов в секунду, чем Apache с mod_php.
- Потребление памяти на 30-50% ниже при одинаковой нагрузке.
- Время отклика (TTFB) уменьшается на 20-40%.
Интересные факты и нестандартные способы использования
- Можно запускать несколько пулов PHP-FPM с разными версиями PHP на одном сервере — удобно для хостинга разных проектов.
- PHP-FPM поддерживает status page — можно мониторить воркеры в реальном времени (см.
pm.status_path
). - С помощью systemd socket activation можно запускать PHP-FPM только при необходимости — экономия ресурсов.
- Можно использовать Nginx как фронтенд, а PHP-FPM — на отдельном сервере (или даже в Docker-контейнере) для масштабирования.
- Скрипты автоматизации (bash, ansible, terraform) легко интегрируются с этой связкой — удобно для DevOps.
Новые возможности: автоматизация и скрипты
- Легко деплоить новые версии сайтов: просто переключаешь пул PHP-FPM на новую директорию.
- Можно писать свои скрипты для ротации логов, мониторинга нагрузки, автоматического рестарта воркеров при утечках памяти.
- Интеграция с CI/CD: деплой через GitHub Actions, GitLab CI, Ansible — всё работает из коробки.
- Гибкая настройка лимитов (memory_limit, max_execution_time) для каждого пула — удобно для SaaS и shared-хостинга.
Выводы и рекомендации
Если тебе нужен быстрый, надёжный и гибкий сервер для PHP — связка Nginx + PHP-FPM это must-have. Она экономит ресурсы, легко масштабируется и подходит для любых проектов — от лендинга до крупного интернет-магазина. Не забывай про грамотную настройку пула воркеров, мониторинг и регулярные обновления. Для автоматизации и CI/CD — это просто находка, всё легко скриптуется и интегрируется.
- Используй Nginx + PHP-FPM для всех новых проектов на PHP.
- Не забывай про безопасность: ограничивай права, используй
open_basedir
, следи за обновлениями. - Для быстрой аренды VPS — заказать VPS.
- Для выделенного сервера — заказать dedicated.
- Экспериментируй с настройками, мониторь нагрузку, не бойся автоматизировать!
Если остались вопросы — смотри официальные доки, спрашивай на Stack Overflow или в комментариях. Удачи в настройке и пусть твой сервер всегда будет быстрым!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.