Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

502 Linux / DevOps

Ошибка 502 Bad Gateway: как перезапустить Nginx и PHP-FPM в Linux для чайников

Обновлено: 27.08.2026 · Официальная документация ↗

Что означает код ошибки 502 Bad Gateway?

Ошибка 502 Bad Gateway (Плохой шлюз) означает, что внешний веб-сервер (обычно Nginx) работает исправно и принял запрос пользователя, но внутренний бэкенд (обработчик скриптов PHP-FPM, Node.js, Gunicorn или Apache) упал, завис от перегрузки или не слушает сетевой сокет.

Схема взаимодействия при ошибке 502:

Браузер клиента  ---[ Запрос ]--->  Nginx (Работает)  ---[ X Нет ответа X ]--->  PHP-FPM (Упал / Завис)
Браузер клиента  <---[ 502 Bad Gateway ]---  Nginx

Причины падения бэкенда:

  • Служба php-fpm аварийно остановилась из-за нехватки оперативной памяти (OOM Killer).
  • Превышен лимит выделенной памяти скрипту (memory_limit).
  • Переполнен пул рабочих процессов (pm.max_children reached).
  • Неправильные права доступа к UNIX-сокету /run/php/php-fpm.sock.

Пошаговое восстановление работы сайта за 3 шага

  1. Шаг 1. Проверяем статус и перезапускаем службу PHP-FPM:

    Узнаем точную версию PHP и перезапускаем службу обработчика:

    # Проверка статуса (для Ubuntu/Debian):
    sudo systemctl status php*-fpm
    
    # Перезапуск службы PHP-FPM (например, PHP 8.2):
    sudo systemctl restart php8.2-fpm
    
    # Для CentOS / RHEL (AlmaLinux):
    sudo systemctl restart php-fpm
  2. Шаг 2. Проверяем статус и конфигурацию Nginx:

    Перед перезапуском Nginx обязательно протестируйте файлы конфигурации на синтаксические ошибки:

    # Тест конфигурации:
    sudo nginx -t
    
    # Если вывод 'syntax is ok', безопасно перезапускаем:
    sudo systemctl restart nginx
  3. Шаг 3. Анализируем логи ошибок для поиска первопричины:

    Если после перезапуска сайт снова падает в 502, откройте последние строки журнала ошибок:

    # Смотрим ошибки Nginx:
    sudo tail -n 50 /var/log/nginx/error.log
    
    # Смотрим системный журнал PHP:
    sudo journalctl -u php8.2-fpm -n 50 --no-pager
  4. Исправление ошибки сокета (connect() to unix:... failed (13: Permission denied)):

    Если в логе Nginx написано Permission denied к сокету PHP, исправьте владельца в файле /etc/php/8.2/fpm/pool.d/www.conf:

    listen.owner = www-data
    listen.group = www-data
    listen.mode = 0660

    После правок выполните: sudo systemctl restart php8.2-fpm.

Совет: Если PHP-FPM падает регулярно при наплыве посетителей, увеличьте параметр pm.max_children в конфигурационном файле пула www.conf и добавьте серверу Swap-файл подкачки.

💡 Практика специалистов: Причиной 90% внезапных ошибок 502 на корпоративных CMS является неконтролируемый рост логов или тяжелые неоптимизированные SQL-запросы, съедающие всю память сервера.

Частые вопросы (FAQ)

В чем разница между ошибкой 502 и 504 Gateway Timeout?

Ошибка 502 означает, что бэкенд мгновенно сбросил соединение или выключен. Ошибка 504 означает, что бэкенд работает, но выполнял тяжелый скрипт слишком долго и превысил лимит ожидания (max_execution_time).

Что делать, если systemctl status показывает, что PHP-FPM 'Active (running)', но 502 ошибка остается?

Проверьте путь к сокету в конфигурационном файле виртуального хоста Nginx (директива `fastcgi_pass`). Путь должен строго совпадать со строкой `listen` в файле `www.conf`.

Как предотвратить убийство PHP системным OOM Killer?

Добавьте файл подкачки (Swap) размером 2–4 ГБ и оптимизируйте лимит памяти PHP `memory_limit = 256M` в файле `php.ini`.

Как перезагрузить конфигурацию Nginx без обрыва текущих сессий пользователей?

Используйте команду `sudo nginx -s reload` или `sudo systemctl reload nginx` вместо команды restart.

Полезные материалы
Рекомендуем