Как обновить PHP-FPM на сервере без простоя и 502 ошибок
Две параллельные трубы с вентилями, одна широкая и одна узкая, у конца узкой лежит зелёный шарик

Как обновить PHP-FPM на сервере без простоя и 502 ошибок

Обновить PHP-FPM можно за 30 минут: сделайте бэкап, поставьте новую версию рядом, перенесите конфиги, смените сокет в nginx и проверьте логи.

Как обновить PHP-FPM: пошаговая инструкция для боевого сервера

Чтобы обновить PHP-FPM безопасно, сделайте бэкап, установите новую версию параллельно со старой, перенесите настройки php.ini и пула, переключите сокет в nginx и проверьте логи. Старую версию отключайте только через несколько дней.

Параллельная установка и переключение одной строкой fastcgi_pass превращают рискованное обновление в управляемую операцию с быстрым откатом.

Ниже разобран весь процесс для 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

  1. 01

    Закрытые уязвимости: версии без поддержки не получают патчей безопасности, и это частая причина взломов сайтов на WordPress, 1С-Битрикс и Laravel.

  2. 02

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

  3. 03

    Совместимость с современными плагинами, темами и пакетами Composer, которые всё чаще требуют PHP 8.1 и выше.

  4. 04

    Лучшие показатели скорости для SEO: быстрый ответ сервера улучшает Core Web Vitals и снижает вероятность таймаутов при обходе сайта роботами.

  5. 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.

было
Посетитель / робот
↓
nginx
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
↓
PHP-FPM 8.1
одна строка
стало
Посетитель / робот
↓
nginx
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
↓
PHP-FPM 8.3

Обе версии работают одновременно, пока вы не удалите старую. Поэтому откат — это возврат прежнего значения в 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: пошаговая инструкция

  1. 01

    Определите текущую версию и модули. Выполните php -v и systemctl list-units | grep fpm, затем сохраните список расширений командой php -m > modules_old.txt. Он понадобится, чтобы установить те же модули для новой версии.

  2. 02

    Сделайте резервные копии: файлы сайта, дамп базы данных (mysqldump или pg_dump), а также каталоги /etc/php и /etc/nginx, например командой tar -czf php-nginx-backup.tar.gz /etc/php /etc/nginx.

  3. 03

    Подключите репозиторий Ondřej Surý. На Ubuntu это sudo add-apt-repository ppa:ondrej/php, на Debian — репозиторий Sury по инструкции автора. После этого выполните sudo apt update.

  4. 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.

  5. 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.

  6. 06

    Проверьте синтаксис конфигурации: sudo php-fpm8.3 -t. Команда должна завершиться сообщением, что тест конфигурации прошёл успешно.

  7. 07

    Запустите новый сервис и включите автозапуск: sudo systemctl enable --now php8.3-fpm. Убедитесь, что в каталоге /run/php/ появился сокет php8.3-fpm.sock.

  8. 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.

  9. 09

    Переключите PHP в командной строке для cron, Composer и консольных скриптов: sudo update-alternatives --set php /usr/bin/php8.3. Проверьте результат командой php -v.

  10. 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 / UbuntuAlmaLinux / Rocky / RHEL
Подключить репозиторийadd-apt-repository ppa:ondrej/php (Ubuntu) или репозиторий Sury (Debian)Установить пакет remi-release
Установить PHP-FPMapt install php8.3-fpm + нужные модулиdnf module reset php, dnf module enable php:remi-8.3, dnf update php*
Проверить конфигурациюphp-fpm8.3 -tphp-fpm -t
Перезапустить сервисsystemctl restart php8.3-fpmsystemctl 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

Большинство проблем после обновления вызваны не самим PHP, а забытыми мелочами в окружении.

Как делать не нужно

  • Обновлять боевой сервер без бэкапа и тестовой копии, надеясь, что всё пройдёт гладко.
  • Забыть сменить fastcgi_pass в nginx и получить ошибку 502 Bad Gateway, потому что старый сокет больше не существует.
  • Не установить нужные расширения (mbstring, curl, gd, intl, zip, pdo_mysql) и обнаружить это по белому экрану на сайте.
  • Скопировать старый php.ini поверх нового и унаследовать устаревшие или удалённые директивы.
  • Сразу удалить старую версию и лишить себя возможности быстрого отката.

Как правильно

  1. 01

    Сначала проверить обновление на копии сайта, а перед работами сделать бэкап или снимок диска.

  2. 02

    После установки сверить сокет в конфигурации nginx и PHP-пуле и проверить конфиг командами php-fpm8.3 -t и nginx -t.

  3. 03

    Сравнить php -m до и после и доустановить недостающие модули.

  4. 04

    Переносить значения в новый php.ini вручную через diff, а не копировать файл целиком.

  5. 05

    Держать старую версию включённой несколько дней и удалять её только после спокойного периода без ошибок в логах.

Как откатиться, если что-то пошло не так

Если вы устанавливали новую версию параллельно, откат предельно прост: вернуть прежний путь к сокету в nginx и перезагрузить веб-сервер. Все данные и файлы сайта остаются нетронутыми, поскольку обновляется только интерпретатор.

После отката не пытайтесь чинить ошибки на боевом сервере. Разберите логи PHP-FPM и nginx, воспроизведите проблему на тестовой копии, устраните её (обновите плагин, исправьте код) и повторите переключение в спокойное время.

таймлайн

Откат за несколько минут

01
Заметили проблемурост ошибок 5xx в логе nginx или в мониторинге
02
Вернули сокетfastcgi_pass на php8.1-fpm.sock
03
Применили конфигnginx -t && systemctl reload nginx
04
Разобрали причинуна тестовой копии, без влияния на посетителей
Если сайт работает на хостинге с панелью управления (ISPmanager, FASTPANEL, HestiaCP и аналогичными), версию PHP для каждого сайта обычно меняют в настройках домена в пару кликов. Принцип тот же: сначала проверьте совместимость на тестовом домене, затем переключайте боевой сайт.

Итоги: как обновить PHP-FPM безопасно

Безопасное обновление PHP-FPM — это подготовка, параллельная установка новой версии, переключение одной строкой в nginx и несколько дней наблюдения за логами.
  1. 01

    Сделайте бэкап и сохраните список модулей и настроек до начала работ.

  2. 02

    Установите новую версию PHP-FPM рядом со старой и проверьте конфигурацию командой php-fpm8.3 -t.

  3. 03

    Перенесите параметры php.ini и пула вручную, а не копированием целых файлов.

  4. 04

    Смените сокет в fastcgi_pass, выполните nginx -t и reload, а затем протестируйте ключевые страницы.

  5. 05

    Следите за логами и показателями в Яндекс Вебмастере, Google Search Console и Метрике, а старую версию удаляйте не раньше чем через несколько дней.

Регулярное обновление PHP — не разовая задача, а часть обслуживания сайта: оно экономит ресурсы сервера, защищает проект и поддерживает скорость, на которую ориентируются и посетители, и поисковые системы. Если нет времени или уверенности в совместимости кода, доверьте миграцию специалистам: мы проверим проект, проведём обновление и подготовим откат.

Часто задаваемые вопросы

Обновим PHP-FPM на вашем сервере без простоя и потери трафика

Проверим совместимость сайта, перейдём на актуальную версию PHP и подготовим безопасный откат

Бесплатный аудит сервераБэкап перед работамиПлан отката

Перенос выполняем сначала на тестовой копии

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

Полученные сведения не передаются третьим лицам, за исключением случаев исполнения обязательств перед клиентом (с его разрешения) и обоснованных требований закона.

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.