Перейти к содержимому
SEO/Опубликовано 23 сентября 2026 г./5 мин

Ошибка 502: что она значит и чья это поломка

Собрали стенд и сломали сервер приложения девятью способами. 502 рисует исправный посредник, а сломан тот, кто за ним. По строке в журнале видно, что именно отказало, а по скорости ответа — искать ли зависание.

Ошибка 502: что она значит и чья это поломка
С
Команда NEXFORCE
SEO-эксперт NEXFORCE

Ошибка 502 пугает тем, что её показывает сервер, но пишет она о другом сервере. Владелец видит «502 Bad Gateway», звонит в хостинг, хостинг говорит «у нас всё работает» — и оба правы. Мы собрали стенд, где эту ошибку можно вызвать нарочно, и разобрали, кто в каждом случае на самом деле сломан.

Что говорит определение

Стандарт HTTP, RFC 9110, раздел 15.6.3: код 502 означает, что сервер, «действуя как шлюз или прокси, получил недопустимый ответ» от сервера, к которому обратился. Справочник кодов Яндекса повторяет это почти дословно: «Сервер, действуя в качестве шлюза или прокси-сервера, получил недопустимый ответ от следующего сервера в цепочке запросов».

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

Совет у Яндекса соответствующий: «Проверьте работоспособность и настройки всех серверов в цепочке обработки запроса». Не одного сервера, а всех.

Сколько звеньев у обычного сайта

Чтобы понять, насколько длинная эта цепочка в жизни, мы посмотрели заголовки ответов у 260 сайтов компаний Екатеринбурга — того же списка, по которому строились наши прошлые замеры.

Ответили 246 сайтов из 260. Вот кто стоит у них первым звеном, если верить заголовку Server:

Первое звеноСайтовДоля
nginx и его сборки (включая OpenResty)16768%
Служба защиты от атак (DDoS-Guard, Qrator, Cloudflare)6426%
Apache52%
Заголовок не отдан83%
Прочие21%

Каждый четвёртый сайт в списке стоит за службой защиты: запрос посетителя сначала попадает к ней, а уже она идёт к серверу сайта.

Заголовок Server называет только того, кто отдал ответ последним, — ближайшее к посетителю звено. Что стоит за ним, по нему не видно. Но заголовок X-Powered-By: PHP у 71 сайта говорит, что за веб-сервером работает ещё и интерпретатор. Это нижняя граница: многие этот заголовок прячут, а службы защиты его почти всегда срезают. А там, где снаружи защита от атак, звеньев как минимум три: защита, веб-сервер сайта, приложение.

Каждое звено, стоящее перед другим, способно выдать 502. Поэтому вопрос «чья поломка» всегда сводится к вопросу «какое звено нарисовало страницу».

Стенд: девять способов сломать приложение

Мы поставили nginx — самый частый веб-сервер в списке выше — и за ним несколько поддельных «приложений», каждое из которых ломается по-своему. Посредник настроен так: ждать соединения 3 секунды, ответа — 5 секунд. Затем к каждому сделали запрос и записали, что увидел посетитель и что появилось в журнале ошибок nginx.

Что случилось с приложениемЧто увидел посетительВремя ответаСтрока в журнале nginx
Работает2001 мс—
Не запущено, порт закрыт5020,6 мсconnect() failed (111: Connection refused)
Нет сокета PHP-FPM5022 мсconnect() to unix:… failed (2: No such file or directory)
Принял запрос и оборвал соединение5021 мсupstream prematurely closed connection while reading response header
Заголовки ответа больше буфера5021 мсupstream sent too big header
Имя сервера приложения не находится5022 сcould not be resolved (110: Operation timed out)
Думает дольше 5 секунд5045 сupstream timed out … while reading response header
Адрес приложения не отвечает вовсе5043 сupstream timed out … while connecting to upstream
Само ответило 5005001 мс—
Само ответило 5035031 мс—

Из таблицы видно три вещи.

Во всех шести случаях 502 сам nginx исправен. Он принял запрос, честно попытался передать его дальше и сообщил о результате. Сломано то, что за ним: приложение не запущено, упало посреди запроса, отдало слишком большие заголовки, либо посредник не знает, где его искать.

502 приходит мгновенно, 504 — после ожидания. Если приложение лежит, ошибка приходит за доли миллисекунды: соединение отклоняется сразу. Если приложение зависло, посредник ждёт до своего предела и отдаёт 504. Скорость появления ошибки — первая подсказка, что искать: упавший процесс или зависший.

Собственные ошибки приложения проходят насквозь. Когда приложение само отвечает 500 или 503, nginx передаёт этот код посетителю без изменений. Значит, 502 никогда не означает «в коде сайта ошибка» напрямую — это значит, что приложение не смогло ответить по правилам вообще.

Две поломки, которые 502 не показывают

Два сценария стенда дали результат, которого мы не ждали.

Приложение ответило текстом ошибки вместо ответа. Поддельное приложение вместо заголовков HTTP прислало строку «Fatal error: Allowed memory size exhausted» — так выглядит упавший PHP без настроенного вывода ошибок. Nginx записал в журнал upstream sent no valid HTTP/1.0 header, но посетителю отдал не 502, а сам этот текст — без заголовков, в режиме древнего HTTP/0.9. В журнале доступа код ответа записан как 009. Современные браузеры такой ответ часто вовсе отказываются показывать, а проверка кодов ответа его не распознает: кода в нём нет.

Приложение оборвалось посреди страницы. Второе поддельное приложение отправило заголовок «200, длина 10 000 байт» и оборвало соединение на 700-м байте. Журнал ошибок записал ту же строку, что и в случае 502: upstream prematurely closed connection. Но посетитель получил код 200 и обрезанную страницу, а в журнале доступа стоит обычный успешный ответ.

Вывод: журнал доступа и коды ответа показывают не все поломки. Одна и та же строка в журнале ошибок может означать и 502, и «200 с обрезанной страницей» — зависит от того, в какой момент приложение упало.

Сколько 502 встречается в жизни

Мы обошли те же 260 сайтов четыре раза подряд, с перерывом в двадцать минут: 1040 запросов обычным браузером за час с небольшим. Ни одного ответа 5xx. 951 раз пришло 200, 72 раза сайт не ответил вовсе — 14 адресов молчали во всех четырёх кругах, ещё 7 пропадали время от времени. Остальное — 401, 402, 403 и 429, то есть отказы, а не поломки.

Единственные 502, что мы видели на живых сайтах, пришли в соседнем обходе ошибки 403, и не людям, а тем, кто назвался роботом: браузер на тех же адресах в ту же минуту получал 200. Это не поломка, а способ отказать — сервер отвечает «502», чтобы робот ушёл.

Разовый обход 502 не ловит — по той же причине, что и 503: это ошибка минут, а не дней. Приложение перезапускается, падает под нагрузкой, отдаёт раздутые заголовки на одной странице из тысячи. Чтобы её увидеть, нужно наблюдение, а не проверка. Подробнее о том, почему обходы пропускают временные ошибки, — в статье про ошибку 503.

На нашем собственном сайте статистика обхода в Вебмастере за всё время не содержит ни одного ответа 5xx. Причина скучная: страницы отдаются готовыми файлами с диска, и звена, способного упасть за веб-сервером, просто нет.

Как понять, чья это поломка

По шагам, от быстрого к медленному:

  1. Посмотрите на саму страницу ошибки. Внизу стандартной страницы nginx стоит его имя и версия — значит, ошибку нарисовал веб-сервер сайта, а сломалось приложение за ним. Если страница оформлена службой защиты от атак, то до вашего сервера не достучалась она, и смотреть надо уже на сам сервер.
  2. Засеките, сколько ждали. Ошибка сразу — приложение не запущено или падает. Ошибка через несколько секунд или минуту — это чаще 504, и искать надо зависание: медленный запрос к базе, внешний сервис.
  3. Проверьте, все ли страницы. Ошибка везде — лежит приложение целиком. Ошибка на одной-двух страницах — искать, чем они отличаются: большие cookie, тяжёлый отчёт, выгрузка.
  4. Найдите строку в журнале ошибок веб-сервера. Таблица выше — словарь: Connection refused значит «приложение не запущено», prematurely closed — «упало посреди работы», too big header — «слишком большие заголовки».
  5. Напишите в поддержку с фактами. Время, адрес, что показала страница ошибки и строка из журнала. «Сайт выдаёт 502» — это вопрос; «в 14:05 на /catalog/ — upstream prematurely closed» — это задача.

Если сайт не открывается вовсе, без всякого кода, — это другая история, и порядок проверки там свой: когда сайт не отвечает.

Что 502 значит для поиска

Робот поисковика получает ту же ошибку, что и посетитель. Справка Вебмастера предупреждает: если роботу не удалось подключиться к сайту из-за ошибки сервера, «сайт может полностью пропасть из поиска». Там же: страница с кодом, отличным от 200, «недоступна для роботов и посетителей и не может попасть в поиск».

Одна короткая 502 такого не сделает — робот вернётся. Опасна повторяющаяся: если приложение падает каждую ночь во время резервного копирования, робот будет раз за разом натыкаться на ошибку. Увидеть это можно в Вебмастере, в статистике обхода: ответы 5xx там идут отдельной линией.

Чего мы проверить не смогли

  • Как 502 рисуют службы защиты от атак. У них свои страницы ошибок, и вызвать их на чужом сайте нельзя. Мы проверили только nginx.
  • Другие веб-серверы. Apache, Caddy и балансировщики облаков могут отвечать на те же поломки другими кодами. Стенд собран на nginx 1.22.
  • Что покажет браузер на ответ без заголовков. Мы проверили его утилитой curl; браузеры обходятся с ним по-разному.
  • Ошибку под нагрузкой. Самая частая 502 в жизни — перегруженный пул PHP-FPM, когда все его процессы заняты. На стенде нагрузки не было.

Границы замера

Стенд — это модели поломок, а не настоящие приложения. Время ответа измерено на одной машине без сети между звеньями; в жизни к нему добавится дорога. Тайм-ауты стенда (3 и 5 секунд) выставлены нами — у nginx по умолчанию они 60 секунд, и 504 там придёт через минуту.

Обход 260 сайтов — это четыре круга за час с небольшим 23 сентября, из Екатеринбургского списка. Отсутствие 502 в нём говорит об отсутствии постоянных поломок, а не о том, что временных не бывает.

Коротко

  • 502 выдаёт посредник, и он исправен. Сломано звено за ним: приложение, PHP-FPM, настройка адреса.
  • Ошибка сразу — приложение лежит. Ошибка после ожидания — это 504 и зависание.
  • Собственные 500 и 503 приложения проходят к посетителю как есть; 502 означает, что приложение не ответило по правилам вообще.
  • Не все поломки дают 502: упавший PHP может отдать текст ошибки, а оборвавшееся приложение — обрезанную страницу с кодом 200.
  • Строка в журнале ошибок веб-сервера говорит, что именно сломалось, точнее любого кода.
  • Разовой проверкой 502 не поймать: это ошибка минут, нужен мониторинг.
Вопросы и ответы

FAQ по теме

Что означает ошибка 502 Bad Gateway?+
Что посредник — прокси, балансировщик, защита от атак — не получил годного ответа от следующего сервера в цепочке. Стандарт HTTP (RFC 9110) описывает 502 как «недопустимый ответ» от вышестоящего сервера. Сам посредник при этом исправен: страницу с ошибкой рисует именно он.
Кто виноват в ошибке 502 — хостинг или сайт?+
Почти всегда то звено, что стоит за посредником: сервер приложения, PHP-FPM, Node.js, база. На нашем стенде все шесть случаев 502 — это упавшее, закрывшее соединение или неправильно ответившее приложение, а сам nginx каждый раз оставался исправным.
Чем 502 отличается от 504?+
Скоростью. 502 приходит сразу — за доли секунды, если приложение лежит. 504 приходит после ожидания: посредник ждал ответа и не дождался. На стенде 502 от упавшего приложения пришла за 0,6 миллисекунды, а 504 от зависшего — ровно через заданные 5 секунд.
Влияет ли ошибка 502 на позиции в Яндексе?+
Короткая — нет, робот вернётся. Справочник кодов Яндекса относит 502 к ошибкам сервера, а справка предупреждает: если робот не смог подключиться к сайту из-за ошибки сервера, сайт может пропасть из поиска. Опасна не одна ошибка, а долгая.