Ошибка 502 Bad Gateway: что это значит и как исправить
502 Bad Gateway означает, что сервер-посредник (обычно nginx или балансировщик) получил запрос от браузера, но не смог получить корректный ответ от внутреннего обработчика — PHP-FPM, Apache, Node.js или другого приложения. Посетителю достаточно подождать и обновить страницу, а владельцу сайта нужно проверить логи прокси и состояние upstream-сервиса.
Содержание
Коротко: как исправить ошибку 502 владельцу сайта
- Проверьте, воспроизводится ли ошибка локально. Выполните curl -I https://ваш-сайт.ru/ и curl -I http://127.0.0.1/ на самом сервере. Если локально код 200, а снаружи 502 — сбой на уровне CDN, балансировщика или внешнего прокси, а не приложения.
- Прочитайте логи прокси-сервера. В /var/log/nginx/error.log ищите строки «connect() failed», «no live upstreams», «upstream timed out», «upstream sent too big header». Они прямо указывают звено: недоступный порт или сокет, таймаут, слишком большие заголовки.
- Проверьте состояние upstream-сервиса. Убедитесь, что процесс запущен и слушает нужный порт: systemctl status php8.2-fpm, ss -ltnp | grep 9000 (для Node.js — pm2 status). Проверьте, что путь к сокету в конфиге nginx совпадает с реальным (ls -l /run/php/).
- Согласуйте таймауты и лимиты. Поднимите fastcgi_read_timeout или proxy_read_timeout, если запросы долгие, и увеличьте pm.max_children в пуле PHP-FPM, если воркеры заняты все. Проверьте лимиты памяти: нехватка RAM приводит к тому, что процесс убивает OOM-killer.
- Перезапустите аккуратно и проверьте результат. Используйте плавную перезагрузку: nginx -t && nginx -s reload, systemctl reload php8.2-fpm. Затем повторите curl -I и убедитесь, что код ответа 200, а в логах нет новых ошибок upstream.
Что означает ошибка 502 Bad Gateway
Код 502 входит в класс 5xx — ошибки на стороне сервера. Дословно Bad Gateway переводится как «неверный шлюз». Смысл такой: сервер, принявший запрос от браузера, сам страницу не формирует. Он работает посредником — обратным прокси — и передаёт запрос следующему звену: PHP-FPM, Apache, Node.js, контейнеру приложения или другому серверу. Это звено должно вернуть корректный HTTP-ответ, но вместо него приходит пустота, обрыв соединения или данные не по протоколу. Собрать страницу прокси не может и отдаёт 502.
Ключевой момент: 502 говорит не «сайт упал», а «одно из внутренних звеньев не отвечает как положено». Внешний сервер при этом работает — иначе браузер показал бы ошибку соединения, а не HTTP-код.
Как ошибка выглядит в браузерах
- Chrome и Edge показывают страницу «502 Bad Gateway» с подписью сервера, например nginx или cloudflare.
- Firefox выводит заголовок «502 Bad Gateway» и короткое пояснение, что сервер получил недопустимый ответ.
- Safari ограничивается фразой «Bad Gateway».
- В мобильных браузерах и встроенных webview текст часто сокращён до «Ошибка сервера» или «Что-то пошло не так».
Иногда страницы ошибки нет вообще: приходит пустой белый экран, JSON от API или битая вёрстка. В инструментах разработчика на вкладке Network видно, что документ отдан с кодом 502. Скрипты и боты видят то же самое: Python-библиотека requests возвращает <Response [502]>, JavaScript-библиотека axios выдаёт сообщение «Request failed with status code 502». Если вы собираете данные автоматически, стоит предусмотреть повторные попытки — об этом есть материал о парсинге сайтов.
Чем отличается от похожих кодов
| Код | Что означает | Кто виноват |
|---|---|---|
| 500 | Внутренняя ошибка приложения | Код на сервере отработал с исключением, но ответ всё же вернул |
| 502 | Прокси не получил корректный ответ от внутреннего сервиса | Упавший процесс, неверный порт или сокет, обрыв связи |
| 503 | Сервис недоступен | Перегрузка, обслуживание, исчерпание воркеров |
| 504 | Прокси не дождался ответа | Таймаут обработки запроса |
| 403 / 404 | Доступ запрещён / адрес не найден | Настройки доступа и структура сайта |
Границы не всегда чёткие: при нехватке памяти приложение может отдать и 500, и 502. Полезно сравнить материалы про ошибку 500, 503 Service Unavailable и 504 Gateway Timeout — нередко эти коды идут в паре с 502 при одной и той же перегрузке.
Причины ошибки
Со стороны посетителя
Локальных причин немного, и почти все они связаны не с самим сайтом, а с путём до него: корпоративный прокси, VPN, антивирус с проверкой HTTPS, устаревший кэш браузера, расширение-блокировщик. Бывает и так, что 502 отдаёт CDN или балансировщик из-за краткого перезапуска сервиса на стороне сайта.
Со стороны владельца сайта
- процесс PHP-FPM или приложения не запущен, упал или перезапускается;
- в конфиге прокси указан неверный путь к сокету или порт, либо у пользователя нет прав на сокет;
- закончились свободные воркеры:
pm.max_childrenменьше, чем одновременных запросов; - обработка запроса дольше таймаута
fastcgi_read_timeoutилиproxy_read_timeout; - приложение слушает
127.0.0.1, а прокси обращается к внешнему интерфейсу, или наоборот; - заголовки ответа слишком велики для буферов прокси;
- нехватка оперативной памяти: процесс убивает OOM-killer;
- ошибка при деплое — конфиг обновлён, а сервис не перечитал его;
- сбой на уровне CDN или хостинг-панели, который виден только снаружи.
Что делать посетителю
- Обновите страницу и подождите одну-три минуты: при перезапуске сервиса ошибка обычно исчезает сама.
- Нажмите Ctrl+F5 (в macOS — Cmd+Shift+R), чтобы сбросить кэш, или откройте адрес в режиме инкогнито.
- Отключите VPN, прокси и подозрительные расширения, проверьте сайт с мобильного интернета.
- Попробуйте другой браузер и другое устройство, чтобы исключить локальные настройки.
- Если сервис государственный, банковский или игровой, загляните в официальные каналы оповещений: 502 часто сопровождает плановые работы и пиковую нагрузку.
- Если ошибка держится часами на всех устройствах, сообщите в поддержку сервиса, указав время и адрес страницы.
Что делать владельцу: пошаговая диагностика
Шаг 1. Определите, где обрыв
curl -I https://example.com/
curl -sS -o /dev/null -w "%{http_code}\n" http://127.0.0.1/
Если на самом сервере локальный запрос отдаёт 200, а внешний — 502, ищите причину выше приложения: CDN, балансировщик, внешний прокси. Если 502 и локально — проблема внутри связки «прокси плюс приложение».
Шаг 2. Прочитайте логи
tail -n 100 /var/log/nginx/error.log
grep -iE "upstream|no live upstreams|timed out" /var/log/nginx/error.log | tail -20
journalctl -u php8.2-fpm -n 100 --no-pager
Типичные записи и их смысл:
connect() failed (111: Connection refused) while connecting to upstream— процесс не слушает порт или сокет;upstream timed out (110: Connection timed out)— обработчик не уложился в таймаут;no live upstreams— все серверы в группе признаны неработоспособными;upstream sent too big header— не хватает буферов под заголовки.
Разбор типовых конфигураций nginx для этой ошибки дан в материале 502 Bad Gateway в nginx.
Шаг 3. Проверьте nginx и PHP-FPM
nginx -t
systemctl status php8.2-fpm
ls -l /run/php/
php-fpm8.2 -t
Путь к сокету в конфиге должен совпадать с реальным файлом, а версия — с установленной. Рабочий блок для сайта выглядит примерно так:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_read_timeout 60s;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
}
В пуле PHP-FPM проверьте лимит процессов и время жизни запроса:
pm = dynamic
pm.max_children = 25
pm.max_requests = 500
request_terminate_timeout = 60s
listen = /run/php/php8.2-fpm.sock
pm.max_children считают от доступной памяти: объём RAM делят на средний размер процесса PHP. Если воркеры заняты все, новые запросы встают в очередь и в итоге получают 502 или 504.
Шаг 4. Apache за прокси
apachectl configtest
systemctl status apache2
tail -f /var/log/apache2/error.log
Если PHP обрабатывается через FPM, а не модулем, нужен корректный обработчик и достаточный таймаут:
ProxyTimeout 60
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
</FilesMatch>
Частая причина — забытый модуль proxy_fcgi или устаревший .htaccess после переезда: проверьте, включены ли proxy_module и proxy_fcgi_module.
Шаг 5. Node.js и другие приложения
pm2 status
pm2 logs --lines 100
ss -ltnp | grep -E "3000|8080"
curl -I http://127.0.0.1:3000/health
Со стороны nginx важны адрес, таймауты и keepalive до приложения:
upstream backend {
server 127.0.0.1:3000 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_read_timeout 60s;
}
}
Если приложение запущено в контейнере, проверьте, что порт опубликован и доступен из сети прокси, а health-check не возвращает ошибку.
Шаг 6. WordPress и другие CMS
- включите журнал: в
wp-config.phpзадайтеdefine('WP_DEBUG', true);иdefine('WP_DEBUG_LOG', true);, файл появится вwp-content/debug.log; - поочерёдно отключайте плагины (достаточно переименовать папку
wp-content/plugins), чтобы найти конфликтующий; - переключитесь на стандартную тему и проверьте, сохраняется ли ошибка;
- проверьте
memory_limitиmax_execution_timeв PHP: тяжёлые импорты и массовые операции в админке часто приводят именно к 502; - при высокой нагрузке перенесите обработку
admin-ajax.phpи wp-cron на отдельные процессы или в очередь.
Шаг 7. Закрепите исправление
nginx -t && nginx -s reload
systemctl reload php8.2-fpm
Плавная перезагрузка не рвёт текущие соединения, в отличие от restart. После правок повторите curl -I и убедитесь, что в логах нет новых записей об ошибках upstream.
Как предотвратить повторение
- Мониторинг доступности. Проверяйте не только главную страницу, но и ключевые сценарии: вход в аккаунт, оформление заказа, API. Настройте оповещения на всплеск ответов 5xx в логах, а не только на полную недоступность.
- Регулярный разбор логов. Ротация через logrotate и недельная выборка по коду 502 показывают, растёт ли частота сбоев и к каким часам они привязаны.
- Лимиты под реальную нагрузку. Пересматривайте
pm.max_children,pm.max_requests,proxy_read_timeoutпри росте трафика и после добавления тяжёлых функций. - Запас по памяти. Следите за потреблением RAM и swap: нехватка памяти — скрытая причина внезапных 502 сразу на всех страницах.
- Health-check и резерв. В группе upstream полезны проверка доступности, параметры
max_failsиfail_timeout, а при возможности — резервный сервер. - Аккуратные деплои. Обновляйте конфиги через
reload, держите возможность быстрого отката, не выводите тяжёлые миграции на рабочие часы. - Кэш и очередь. Статику и повторяющиеся запросы отдавайте из кэша, длительные операции выносите в фоновые задачи — это снижает число запросов, которые могут упереться в таймаут.
Частые вопросы
Что означает ошибка 502 простыми словами?
Это сбой связи между промежуточным сервером и внутренним обработчиком сайта. Браузер обратился к серверу, тот передал запрос дальше — приложению, — но ответа не получил или получил некорректный. Поэтому вместо страницы выводится «502 Bad Gateway».
Ошибка 502 — это проблема моего компьютера или сайта?
В подавляющем большинстве случаев — сайта или хостинга. На стороне пользователя причиной бывают только VPN, прокси, антивирус с проверкой HTTPS или кэш браузера. Проверить легко: откройте сайт с мобильного интернета — если ошибка осталась, дело в сервере.
Чем 502 отличается от 503 и 504?
502 — внутренний сервис вернул некорректный ответ или соединение с ним сорвалось. 503 — сервер доступен, но перегружен или закрыт на обслуживание. 504 — внутренний сервис не ответил за отведённое время. Причины похожи, но 502 чаще связан с падением процесса или неверным портом и сокетом, 504 — с таймаутами.
Что значит «Request failed with status code 502» при работе скрипта?
Так библиотеки для HTTP-запросов (например, axios в JavaScript или requests в Python) сообщают, что сервер ответил кодом 502. Для скрипта это такая же ошибка, как и для браузера: нужно повторить запрос с задержкой и ограничить число попыток, а если ошибка постоянная — сообщить владельцу сервиса.
Почему 502 появляется только на отдельных страницах?
Страницы, которые обращаются к тяжёлым запросам, внешним API или админке, дольше обрабатываются и чаще попадают в таймаут либо исчерпывают воркеры PHP-FPM. Также ошибка возникает, если конкретный скрипт падает или превышает memory_limit.
Что делать, если ошибка 502 на Госуслугах, у оператора или в игре?
Это сбой на стороне сервиса: обычно он связан с нагрузкой или техническими работами. Нужно подождать, обновить страницу позже, проверить официальные каналы оповещений. Со своей стороны можно сменить сеть, отключить VPN и расширения браузера.
Материал подготовлен редакцией справочника Торох и носит справочный характер: интерфейсы программ и настройки серверов зависят от версии. Нашли неточность? Напишите нам.
Читайте также
- Ошибка 502 Bad Gateway в nginx: причины и способы исправления
- Ошибка 503 (Service Unavailable): что это значит и как исправить
- Ошибка 504 Gateway Timeout: что означает и как исправить
- Ошибка 403 Forbidden: что это значит и как исправить
- Ошибка 404: страница не найдена — что это значит и как исправить
- Ошибка 500 (Internal Server Error): что это значит и как исправить