Ошибки

Ошибка 502 Bad Gateway: что значит и как исправить

502 Bad Gateway — сервер-посредник, например nginx, не смог получить от следующего сервера нормальный ответ: соединиться не удалось, ответ оборвался или был испорчен. Следующий сервер — это PHP-FPM, приложение на Python или Node.js или другой сервер. Сам nginx при этом работает: сломано то, что за ним. Причину nginx записывает в журнал ошибок.

Обновлено 07.10.2026≈ 6 мин чтения
Содержание 14

Что означает код 502

По стандарту HTTP код 502 значит: сервер, работая посредником, получил неправильный ответ от следующего сервера, к которому обратился, чтобы выполнить запрос. nginx отвечает 502 и тогда, когда соединиться со следующим сервером не удалось совсем.

Страница nginx с этой ошибкой называется «502 Bad Gateway», внизу у неё подпись nginx. Если страница выглядит иначе — например, оформлена в стиле CDN, — ответил другой посредник: тогда 502 значит, что уже CDN не получил нормального ответа от вашего сервера.

Если вы посетитель

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

Как найти причину по журналу

Причину nginx записывает в журнал ошибок. Последние строки покажет команда:

sudo tail -n 50 /var/log/nginx/error.log

Все строки из таблицы ниже nginx пишет на уровне error или выше, поэтому они видны в журнале без дополнительных настроек.

Строка в журналеЧто случилось
connect() to unix:/run/php/php8.3-fpm.sock failed (2: No such file or directory)PHP-FPM не запущен или в настройках nginx указан сокет другой версии PHP
connect() to unix:/run/php/php8.3-fpm.sock failed (13: Permission denied)У nginx нет прав на сокет PHP-FPM
connect() to unix:/run/php/php8.3-fpm.sock failed (11: Resource temporarily unavailable)PHP-FPM перегружен: очередь подключений к сокету заполнена
connect() failed (111: Connection refused) while connecting to upstreamПо адресу и порту из proxy_pass никто не принимает подключения
upstream prematurely closed FastCGI stdout или upstream prematurely closed connectionPHP или приложение закрыли соединение, не закончив ответ
upstream sent too big headerЗаголовки ответа не поместились в буфер nginx
no live upstreamsВсе серверы из группы upstream помечены как недоступные

PHP-FPM не запущен или указан не тот сокет

Проверьте, работает ли PHP-FPM и какие сокеты есть на сервере:

systemctl status php8.3-fpm
ls -l /run/php/

Если служба остановлена, запустите её командой sudo systemctl start php8.3-fpm и посмотрите в выводе systemctl status, нет ли ошибок при запуске. Если сокет в /run/php/ называется иначе, чем в строке fastcgi_pass, — например, после обновления PHP, — исправьте путь в настройках сайта. В Ubuntu 24.04 это php8.3-fpm.sock, в Ubuntu 26.04 — php8.5-fpm.sock.

Нет прав на сокет

nginx в Ubuntu работает от пользователя www-data, и ему нужно право читать сокет PHP-FPM и писать в него. Владельца, группу и права сокета задают настройки listen.owner, listen.group и listen.mode в настройках пула PHP-FPM (файл www.conf). Права по умолчанию — 0660: читать и писать могут только владелец и группа. Если вы меняли пользователя nginx или эти настройки, проверьте, что nginx попадает во владельцы или в группу сокета. После изменений перезапустите PHP-FPM.

Не хватает процессов PHP-FPM

PHP-FPM обрабатывает запросы ограниченным числом процессов. Их наибольшее число задаёт настройка pm.max_children, и в образце настроек, который идёт с PHP, она равна 5. Если все процессы заняты, новые запросы ждут в очереди, а когда заполнится и она, nginx получит ошибку (11: Resource temporarily unavailable) и ответит 502. О нехватке процессов PHP-FPM предупреждает в своём журнале строкой такого вида:

[pool www] server reached pm.max_children setting (5), consider raising it

Где лежит журнал PHP-FPM, задаёт директива error_log в файле php-fpm.conf. Поднимайте pm.max_children с оглядкой на память: каждый процесс занимает свою. Если процессы заняты потому, что запросы выполняются долго, ищите медленные скрипты — как это сделать, рассказано в разборе ошибки 504.

PHP или приложение оборвали ответ

Строка «upstream prematurely closed» значит, что PHP или приложение закрыли соединение, не закончив ответ: процесс упал из-за ошибки или его остановила система — например, когда на сервере кончилась память. Посмотрите, что в это же время записано в журнале PHP-FPM или приложения.

Ещё одна причина — настройка request_terminate_timeout в пуле PHP-FPM: если она задана, процесс, который работает дольше, принудительно останавливается. По умолчанию она равна 0, то есть выключена.

Заголовки ответа не помещаются в буфер

Строка «upstream sent too big header» значит, что заголовки ответа — например, много cookie — не поместились в буфер nginx. По умолчанию он равен одной странице памяти: 4 или 8 КБ в зависимости от системы. Для PHP поднимите буферы в блоке location с fastcgi_pass:

fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;

Для приложений за proxy_pass то же делают директивы proxy_buffer_size и proxy_buffers. Меняйте обе директивы вместе: если поднять только fastcgi_buffer_size, проверка nginx -t может выдать ошибку про fastcgi_busy_buffers_size.

После любых правок: sudo nginx -t, затем sudo systemctl reload nginx.

Приложение не принимает подключения

Строка «Connection refused» значит, что по адресу и порту из proxy_pass никто не слушает: приложение не запущено, упало или слушает другой порт. Какие программы какие порты слушают, покажет команда:

sudo ss -ltnp

Порт в выводе должен совпадать с портом в proxy_pass. Если приложения в списке нет, запустите его и посмотрите его журнал.

На обычном хостинге

На виртуальном хостинге PHP и веб-сервер настраивает хостер. Если 502 держится больше нескольких минут, напишите в поддержку адрес страницы и время ошибки. Что ещё проверить, рассказано в инструкции Что делать, если хостинг лежит.

502 и поиск Яндекса

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

Чем 502 отличается от соседних кодов

КодКогда возникает
500Ошибка в программе сайта: PHP или приложение ответили, но с ошибкой
502Посредник не получил от следующего сервера нормального ответа
503Сервер временно не может ответить: перегрузка или работы
504Посредник не дождался ответа от следующего сервера

Источники

Сверено 7 октября 2026 года.

Что почитать дальше

Проверено и обновлено: 07.10.2026