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

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

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

502 Bad Gateway Linux / DevOps

Ошибка 502 Bad Gateway в Nginx и PHP-FPM: как найти причину и починить

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

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

Веб-сервер Nginx работает в роли шлюза (Reverse Proxy): он принимает запрос из интернета и передает его обработчику PHP (службе PHP-FPM). Ошибка 502 Bad Gateway означает, что Nginx обратился к PHP-FPM, но тот либо упал, либо завис от перегрузки, либо недоступен по сокету/порту.

Запись в /var/log/nginx/error.logЧто это значит простыми словамиСпособ устранения
connect() to .../php-fpm.sock failed (2: No such file or directory)Служба PHP-FPM выключена или не создала unix-сокетЗапустить службу PHP-FPM или исправить путь к сокету
connect() failed (111: Connection refused)PHP-FPM должен слушать TCP-порт (127.0.0.1:9000), но порт закрытПроверить параметр listen в www.conf
upstream prematurely closed connection while reading response headerСкрипт PHP упал по нехватке памяти (Out of Memory) или сработал SIGSEGVУвеличить memory_limit в php.ini

Пошаговый алгоритм устранения ошибки 502

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

    Узнайте версию установленного PHP и проверьте его статус (замените 8.2 на вашу версию):

    sudo systemctl status php8.2-fpm
    
    # Если служба остановлена, запускаем ее:
    sudo systemctl restart php8.2-fpm
  2. Шаг 2: Читаем последние строки лога ошибок Nginx

    sudo tail -n 20 /var/log/nginx/error.log
  3. Шаг 3: Сверяем путь к сокету в конфигурации

    Откройте файл виртуального хоста вашего сайта (например, /etc/nginx/sites-available/default) и проверьте блок fastcgi_pass:

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # Путь должен в точности совпадать с реальным файлом в /run/php/:
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    }

    Проверьте синтаксис и перезапустите Nginx: sudo nginx -t && sudo systemctl restart nginx.

  4. Шаг 4: Увеличиваем лимиты пула процессов при высокой нагрузке

    Если 502 ошибка появляется только при наплыве посетителей, откройте /etc/php/8.2/fpm/pool.d/www.conf и увеличьте количество воркеров:

    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 10
    pm.min_spare_servers = 5
    pm.max_spare_servers = 20

Совет: Всегда проверяйте оперативную память сервера командой free -m. Если свободная память (available) приближается к 0, Linux OOM Killer аварийно убивает процессы PHP-FPM.

💡 Практика специалистов: В 80% случаев ошибка 502 после обновления Ubuntu возникает из-за того, что apt установил новую версию PHP (например, 8.3), а в конфигах Nginx остался прописан сокет от старой версии 8.1.

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

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

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

Что делать, если при перезапуске PHP-FPM выдает ошибку сокета?

Проверьте права доступа на файл сокета в <code>/etc/php/8.2/fpm/pool.d/www.conf</code>: параметры <code>listen.owner = www-data</code> и <code>listen.group = www-data</code> должны быть раскомментированы.

Как перезапустить связку Nginx + PHP-FPM одной командой?

Выполните: <code>sudo systemctl restart php*-fpm nginx</code>.

Как узнать, какая именно версия PHP-FPM установлена на сервере?

Выполните команду: <code>php -v</code> или просмотрите список установленных служб: <code>systemctl list-units | grep fpm</code>.

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