#Симптомы и область применимости
В панели управления после обновления расширения или модуля отдельные запросы сайта получают 502, тогда как главная страница работает. Нужно проверить связку фронтового Nginx, PHP-FPM и приложения, а также понять, какой обработчик и пул назначен именно этому сайту.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Новый модуль аварийно завершает часть PHP-запросовПроблемный код вызывает исключение или аварийное завершение. | В журнале PHP-FPM есть child exited или fatal error только на конкретном маршруте | Найдите минимальный воспроизводимый URL и журнал приложения. |
| Неверный сокет или версия обработчикаВ панели изменился путь сокета/FPM-пула или версия интерпретатора. | 502 только у одного сайта или после переключения версии PHP | Сверьте назначение сайта и действующий пул. |
| Тайм-аут при обращении к внешнему сервисуЗапрос висит, фронтовый сервер закрывает upstream. | Ошибка возникает на страницах, зависящих от API или базы | Сопоставьте задержку с журналом запросов и лимитами. |
#Пошаговая диагностика и исправление
- 1. Запишите конкретные URL, время и статусОткройте проблемную страницу и одну рабочую в приватном окне, зафиксируйте время, код 502 и адрес. Не запускайте многократный опрос проблемного действия с записью данных или оплатой; используйте чтение безопасной страницы.
- 2. Проверьте назначенную версию PHP в панелиВ разделе сайта откройте настройки обработчика PHP и запишите текущую версию, способ запуска (PHP-FPM или другой режим) и ограничения. После обновления расширения не переключайте сразу весь сервер на другой PHP — изменение может затронуть соседние сайты.
- 3. Сравните веб-журнал и журнал приложенияОткройте журналы веб-сервера для нужного домена в панели. Найдите в момент 502 upstream prematurely closed connection, connect() failed или timeout. Затем посмотрите PHP-FPM и журнал самого приложения: отсутствие PHP-ошибки в доступе Nginx не означает её отсутствие в приложении.
- 4. Убедитесь, что конкретный пул PHP-FPM живЧерез административный SSH при наличии доступа просмотрите процессы php-fpm и слушающие UNIX-сокеты. Имена unit могут зависеть от панели и версии PHP (например, не совпадать с php8.2-fpm). Не перезапускайте все существующие PHP-пулы.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаНужен sudoLinux, только чтение UNIX-сокетов; отсутствие слова php в строке не гарантирует отсутствие FPM.
sudo ss -lxnp | grep -i php
- 5. Проверьте последние изменения расширенияВ панели или в административном интерфейсе движка найдите дату обновления конкретного модуля. Сверьте требования к PHP и зависимости модуля. Если есть тестовая копия сайта, воспроизведите ошибку на ней и временно откатите именно расширение к последней работавшей версии.
- 6. Проверьте нагрузку и ограничения пулаВ служебном журнале PHP-FPM ищите reached pm.max_children, timeout или child exited on signal. Если 502 связана с перегрузкой, не увеличивайте количество процессов без расчёта доступной памяти и проверки базы данных.
- 7. Отключайте модуль только с планом откатаСоздайте резервную копию файлов и базы сайта, убедитесь, что модуль не отвечает за оплату, безопасность и учёт заказов. По возможности отключите его штатным интерфейсом приложения и проверьте один проблемный URL. При исчезновении 502 исправляйте совместимость либо возвращайте предыдущую версию.
- 8. Проверьте результат после штатного примененияВ панели примените проверенную конфигурацию нужного сайта, выполните контрольные запросы к рабочей и проблемной странице, проверьте журнал и отсутствие новых аварий PHP. Если появились ошибки у других сайтов, верните прежнее назначение обработчика.
#Как убедиться, что проблема устранена
Проблемные URL отвечают штатно, журнал больше не фиксирует upstream errors и аварии обработчика; соседние сайты и функции оплаты/авторизации не пострадали.
#Если проблема осталась
Если ошибки идут только при медленном запросе, измерьте время выполнения базы/API и проверьте тайм-ауты каждого уровня. Не увеличивайте глобально fastcgi_read_timeout, пока не выяснена причина задержки.