
Как обновить PHP-FPM на сервере без простоя и 502 ошибок
Обновить PHP-FPM можно за 30 минут: сделайте бэкап, поставьте новую версию рядом, перенесите конфиги, смените сокет в nginx и проверьте логи.
Как обновить PHP-FPM: пошаговая инструкция для боевого сервера
Чтобы обновить PHP-FPM безопасно, сделайте бэкап, установите новую версию параллельно со старой, перенесите настройки php.ini и пула, переключите сокет в nginx и проверьте логи. Старую версию отключайте только через несколько дней.
Ниже разобран весь процесс для Debian и Ubuntu с nginx, отдельно показаны отличия для AlmaLinux, Rocky Linux и RHEL. Вы узнаете, как подготовиться, какие команды выполнять, какие ошибки встречаются чаще всего и как вернуться на прежнюю версию, если что-то пошло не так.
Зачем вообще обновлять PHP-FPM
PHP-FPM (FastCGI Process Manager) — это менеджер процессов, через который веб-сервер nginx или Apache передаёт запросы интерпретатору PHP. Версия PHP-FPM всегда совпадает с версией самого PHP: обновляя одно, вы обновляете и другое.
У каждой ветки PHP есть срок поддержки. Сначала выходят исправления ошибок, затем только патчи безопасности, потом поддержка прекращается полностью. Версии 7.4 и 8.0 уже сняты с поддержки, и уязвимости в них никто не закрывает. Актуальные сроки всегда стоит сверять на официальном сайте php.net.
Вторая причина — скорость. Каждая новая ветка PHP получает оптимизации движка, улучшения OPcache и JIT-компиляции. Для сайта это более быстрый ответ сервера (TTFB), а для поисковиков — стабильная доступность страниц и более щадящая нагрузка при обходе роботами Яндекса и Google.
Что даёт обновление PHP-FPM
- 01
Закрытые уязвимости: версии без поддержки не получают патчей безопасности, и это частая причина взломов сайтов на WordPress, 1С-Битрикс и Laravel.
- 02
Рост скорости: новые версии PHP быстрее обрабатывают запросы и эффективнее расходуют память, а значит, выдерживают больше посетителей на том же железе.
- 03
Совместимость с современными плагинами, темами и пакетами Composer, которые всё чаще требуют PHP 8.1 и выше.
- 04
Лучшие показатели скорости для SEO: быстрый ответ сервера улучшает Core Web Vitals и снижает вероятность таймаутов при обходе сайта роботами.
- 05
Более понятные сообщения об ошибках и строгая типизация упрощают отладку и поддержку проекта.
Как устроена связка nginx и PHP-FPM
Nginx сам не умеет выполнять PHP-код. Он отдаёт статику, а запросы к .php-файлам передаёт PHP-FPM через Unix-сокет (например, /run/php/php8.1-fpm.sock) или TCP-порт (127.0.0.1:9000). Путь к сокету указан в директиве fastcgi_pass в конфигурации виртуального хоста.
Именно это делает обновление удобным. Версии PHP-FPM на Debian и Ubuntu из репозитория Sury устанавливаются рядом друг с другом, у каждой свой сокет, свой каталог настроек и свой systemd-сервис. Переключение сводится к замене одной строки в nginx.
Обе версии работают одновременно, пока вы не удалите старую. Поэтому откат — это возврат прежнего значения в fastcgi_pass.
Подготовка: что проверить до установки
Главный риск при обновлении PHP — несовместимость кода. Функции, объявленные устаревшими (deprecated) в одной ветке, в следующей могут быть удалены. Старые плагины, самописные модули и темы оформления часто ломаются именно на этом.
Поэтому сначала составьте картину того, что у вас сейчас работает: версия PHP, список установленных расширений, ключевые параметры php.ini и пула. Если используется CMS, откройте требования к версии PHP в её документации. Например, у 1С-Битрикс и крупных плагинов для WordPress есть свои минимальные и максимальные поддерживаемые версии.
Лучше всего сначала развернуть копию сайта на тестовом поддомене и прогнать на ней обновление. Если такой возможности нет, сделайте снимок диска у хостинг-провайдера: это самый быстрый способ полного отката.
Перед обновлением PHP-FPM
- Текущая версия записанаphp -v и systemctl list-units | grep fpm
- Список модулей сохранёнphp -m > modules_old.txt
- Сделан бэкапфайлы сайта, дамп базы данных, каталоги /etc/php и /etc/nginx
- Проверена совместимость CMS и плагиновтребования к версии PHP в документации
- Выбрано окно работвремя с минимальным трафиком по данным Яндекс Метрики или Google Analytics
Как обновить PHP-FPM на Debian и Ubuntu: пошаговая инструкция
- 01
Определите текущую версию и модули. Выполните php -v и systemctl list-units | grep fpm, затем сохраните список расширений командой php -m > modules_old.txt. Он понадобится, чтобы установить те же модули для новой версии.
- 02
Сделайте резервные копии: файлы сайта, дамп базы данных (mysqldump или pg_dump), а также каталоги /etc/php и /etc/nginx, например командой tar -czf php-nginx-backup.tar.gz /etc/php /etc/nginx.
- 03
Подключите репозиторий Ondřej Surý. На Ubuntu это sudo add-apt-repository ppa:ondrej/php, на Debian — репозиторий Sury по инструкции автора. После этого выполните sudo apt update.
- 04
Установите новую версию рядом со старой, например: sudo apt install php8.3-fpm php8.3-cli php8.3-mysql php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip php8.3-gd php8.3-intl. Набор расширений подбирайте по сохранённому списку modules_old.txt.
- 05
Перенесите настройки. Не копируйте старый php.ini целиком, а сравните файлы командой diff между /etc/php/8.1/fpm/php.ini и /etc/php/8.3/fpm/php.ini. Перенесите значения memory_limit, upload_max_filesize, post_max_size, max_execution_time, а также параметры пула pm, pm.max_children и pm.max_requests из каталога pool.d.
- 06
Проверьте синтаксис конфигурации: sudo php-fpm8.3 -t. Команда должна завершиться сообщением, что тест конфигурации прошёл успешно.
- 07
Запустите новый сервис и включите автозапуск: sudo systemctl enable --now php8.3-fpm. Убедитесь, что в каталоге /run/php/ появился сокет php8.3-fpm.sock.
- 08
Переключите nginx. В конфигурации сайта замените fastcgi_pass unix:/run/php/php8.1-fpm.sock; на fastcgi_pass unix:/run/php/php8.3-fpm.sock;. Затем выполните sudo nginx -t && sudo systemctl reload nginx. Если используете Apache с proxy_fcgi, замените путь к сокету в SetHandler.
- 09
Переключите PHP в командной строке для cron, Composer и консольных скриптов: sudo update-alternatives --set php /usr/bin/php8.3. Проверьте результат командой php -v.
- 10
Проверьте сайт: главная страница, админка, формы, корзина и оформление заказа. Просмотрите логи: /var/log/nginx/error.log и /var/log/php8.3-fpm.log. Старую версию отключайте не сразу, а через несколько дней стабильной работы: sudo systemctl disable --now php8.1-fpm, после чего можно удалить её пакеты.
Обновление PHP-FPM на AlmaLinux, Rocky Linux и RHEL
В дистрибутивах семейства RHEL используют репозиторий Remi. Принцип другой: версии обычно не стоят параллельно, а переключается модуль dnf, и обновляется единый сервис php-fpm. Поэтому откат здесь менее удобен, и снимок диска или копия сервера перед работами становятся обязательными.
Порядок такой: подключите репозиторий Remi, выполните dnf module reset php, затем dnf module enable php:remi-8.3 и обновите пакеты командой dnf update php*. После этого проверьте конфигурацию командой php-fpm -t и перезапустите сервис. Сокет или порт в этом случае обычно не меняются, поэтому настройки nginx трогать не придётся.
Ниже — сводная таблица ключевых команд и путей для обоих семейств систем.
| Задача | Debian / Ubuntu | AlmaLinux / Rocky / RHEL |
|---|---|---|
| Подключить репозиторий | add-apt-repository ppa:ondrej/php (Ubuntu) или репозиторий Sury (Debian) | Установить пакет remi-release |
| Установить PHP-FPM | apt install php8.3-fpm + нужные модули | dnf module reset php, dnf module enable php:remi-8.3, dnf update php* |
| Проверить конфигурацию | php-fpm8.3 -t | php-fpm -t |
| Перезапустить сервис | systemctl restart php8.3-fpm | systemctl restart php-fpm |
| Каталог настроек | /etc/php/8.3/fpm/ и /etc/php/8.3/fpm/pool.d/ | /etc/php.ini и /etc/php-fpm.d/ |
| Лог ошибок | /var/log/php8.3-fpm.log | /var/log/php-fpm/error.log |
После обновления: настройка пула и OPcache
Новая версия — хороший повод пересмотреть параметры пула. Параметр pm.max_children определяет, сколько запросов PHP обрабатывает одновременно. Его считают как объём памяти, выделенной под PHP, делённый на средний размер одного процесса (его видно в top или htop). Слишком малое значение приводит к очередям и ошибкам 502 и 504, слишком большое — к нехватке оперативной памяти и аварийным остановкам процессов.
Убедитесь, что включён OPcache: opcache.enable=1, а для проектов средней величины хватает opcache.memory_consumption в диапазоне 128–256 МБ. После каждого деплоя кода кэш нужно сбрасывать: проще всего перезагрузить сервис через systemctl reload php8.3-fpm.
Через сутки после переключения посмотрите на внешние показатели. В Яндекс Вебмастере проверьте раздел диагностики и статистику обхода: не выросло ли число ошибок сервера и время ответа. В Google Search Console откройте отчёт «Статистика сканирования» и сравните ответы сервера до и после. Скорость страниц удобно измерить в PageSpeed Insights, а динамику посещаемости и отказов отследить в Яндекс Метрике или Google Analytics.
Типичные ошибки при обновлении PHP-FPM
Как делать не нужно
- Обновлять боевой сервер без бэкапа и тестовой копии, надеясь, что всё пройдёт гладко.
- Забыть сменить fastcgi_pass в nginx и получить ошибку 502 Bad Gateway, потому что старый сокет больше не существует.
- Не установить нужные расширения (mbstring, curl, gd, intl, zip, pdo_mysql) и обнаружить это по белому экрану на сайте.
- Скопировать старый php.ini поверх нового и унаследовать устаревшие или удалённые директивы.
- Сразу удалить старую версию и лишить себя возможности быстрого отката.
Как правильно
- 01
Сначала проверить обновление на копии сайта, а перед работами сделать бэкап или снимок диска.
- 02
После установки сверить сокет в конфигурации nginx и PHP-пуле и проверить конфиг командами php-fpm8.3 -t и nginx -t.
- 03
Сравнить php -m до и после и доустановить недостающие модули.
- 04
Переносить значения в новый php.ini вручную через diff, а не копировать файл целиком.
- 05
Держать старую версию включённой несколько дней и удалять её только после спокойного периода без ошибок в логах.
Как откатиться, если что-то пошло не так
Если вы устанавливали новую версию параллельно, откат предельно прост: вернуть прежний путь к сокету в nginx и перезагрузить веб-сервер. Все данные и файлы сайта остаются нетронутыми, поскольку обновляется только интерпретатор.
После отката не пытайтесь чинить ошибки на боевом сервере. Разберите логи PHP-FPM и nginx, воспроизведите проблему на тестовой копии, устраните её (обновите плагин, исправьте код) и повторите переключение в спокойное время.
Откат за несколько минут
Итоги: как обновить PHP-FPM безопасно
- 01
Сделайте бэкап и сохраните список модулей и настроек до начала работ.
- 02
Установите новую версию PHP-FPM рядом со старой и проверьте конфигурацию командой php-fpm8.3 -t.
- 03
Перенесите параметры php.ini и пула вручную, а не копированием целых файлов.
- 04
Смените сокет в fastcgi_pass, выполните nginx -t и reload, а затем протестируйте ключевые страницы.
- 05
Следите за логами и показателями в Яндекс Вебмастере, Google Search Console и Метрике, а старую версию удаляйте не раньше чем через несколько дней.
Регулярное обновление PHP — не разовая задача, а часть обслуживания сайта: оно экономит ресурсы сервера, защищает проект и поддерживает скорость, на которую ориентируются и посетители, и поисковые системы. Если нет времени или уверенности в совместимости кода, доверьте миграцию специалистам: мы проверим проект, проведём обновление и подготовим откат.
Часто задаваемые вопросы
Установите новую версию PHP-FPM параллельно со старой, перенесите настройки, проверьте конфигурацию командой php-fpm8.3 -t и только потом смените сокет в fastcgi_pass у nginx. Старая версия остаётся в работе, поэтому откат занимает пару минут.
Да, если изменился путь к сокету или порт. Достаточно команды nginx -t и мягкой перезагрузки systemctl reload nginx. Она не обрывает текущие соединения. Если вы обновили PHP внутри той же версии (например, 8.3.10 до 8.3.12), хватит перезапуска сервиса php8.3-fpm.
Выбирайте версию, которая ещё получает исправления безопасности по данным php.net, и которую поддерживает ваша CMS и плагины. Для большинства проектов это актуальные ветки 8.2–8.4. Перед переходом протестируйте сайт на копии.
Косвенно, да. Новые версии быстрее отвечают и реже падают, а это улучшает скорость загрузки, доступность сайта для роботов Яндекса и Google и поведенческие метрики. Кроме того, устаревший PHP без обновлений безопасности повышает риск взлома и попадания в чёрные списки.
Верните в конфигурации nginx старый сокет (например, php8.1-fpm.sock), выполните nginx -t и reload. Если старая версия PHP-FPM не удалена и работает, сайт вернётся в прежнее состояние сразу.
Обновим PHP-FPM на вашем сервере без простоя и потери трафика
Проверим совместимость сайта, перейдём на актуальную версию PHP и подготовим безопасный откат
Спасибо за заявку!
Мы свяжемся с вами в ближайшее время.
Перенос выполняем сначала на тестовой копии



