
Ошибка 502 Bad Gateway - это сообщение одного сервера о том, что другой сервер, на который он полагался, выдал ответ, который невозможно использовать. Это не означает, что «сайт недоступен», и уж тем более не означает, что «вы что-то сделали неправильно»: промежуточный сервер обратился к серверу позади себя за вашей страницей, а в ответ получил мусор, отказ в соединении, либо что-то, что не имело смысла.
Слово «gateway» (шлюз) - вот в чём подсказка. Сервер, к которому вы подключились, - это не тот, который создаёт вашу страницу; это фасад, обратный прокси или балансировщик нагрузки, стоящий перед приложением, которое делает реальную работу. Когда этот фасад получает неправильный ответ от стоящего позади, единственное честное, что он может вам сообщить, - это то, что ответ был плохим. Это именно то, что означает 502.
Картина с двумя серверами
Почти каждый сайт значительного размера состоит как минимум из двух машин. Есть та, к которой ваш браузер подключается первой - nginx, CDN edge, облачный балансировщик нагрузки - и стоящее позади приложение, которое на самом деле запускает код и собирает страницу.
Фасад принимает ваш запрос и пропускает его назад. В большинстве случаев приложение отвечает чисто и фасад отправляет этот ответ вам, незаметно. Ошибка 502 - это то, что вы видите, когда этот второй шаг не удаётся: фасад запросил, и полученный ответ не был допустимым HTTP-ответом, который он мог бы передать.
Итак, 502 никогда не касается сервера, к которому вы обратились. Это сообщение о том, к которому вы не обратились.
502 и 504 - часто путают
Они происходят из одного и того же места - от фасадного сервера, информирующего о том, что позади, - и их различие сильно сужает причину.
- 502 Bad Gateway
- Вышестоящий сервер ответил, но ответ был неиспользуемым - отказано в соединении, рухнувший процесс, мусор на линии. Обычно быстро
- 504 Gateway Timeout
- Вышестоящий сервер вообще не ответил в установленное время. Обычно это медленно, и пауза перед ошибкой сама по себе - подсказка
Грубо говоря: 502 означает «оно сказало что-то неправильное», 504 означает «оно ничего не сказало». Ошибка 502 приходит быстро и указывает на что-то сломанное, рухнувшее или отказывающее в соединениях; 504 приходит медленно и указывает на что-то застрявшее или перегруженное. Если ошибка вернулась почти мгновенно, это гораздо вероятнее 502, чем 504, независимо от того, что говорит страница.
Один момент, который упускают большинство статей: поставщики переименовывают это. Cloudflare возвращает 502, когда ваш origin отправляет неправильный ответ, и собственный 520 для ответа настолько неправильного, что он не подходит ни под один стандартный код. За CDN число, которое вы видите, может быть учётом CDN одного и того же события, а не учётом вашего сервера.
Если вы посетитель
Перезагрузитесь один раз, потому что 502 часто является одним рухнувшим работником или процессом, застигнутым во время перезагрузки, и следующий запрос попадает на здоровый. Если это пройдёт, нечего больше искать.
Если это сохраняется, вина лежит на стороне сайта и вы действительно мало что можете сделать, кроме как сообщить им об этом, потому что ни одна настройка в вашем браузере не достигнет сломанного процесса на их сервере. Прежде чем вы предположите, что это вы, подтвердите, что это не локальное: самая быстрая проверка - указать проверяющему HTTP статуса адрес, который запрашивает страницу с нашего сервера, а не с вашего, и сообщает пришедший код. Если он видит 502 тоже, проблема не в вашем соединении.
Если это ваш сайт
Ошибка 502 говорит о том, что фасад не мог использовать то, что отправило приложение, поэтому вопрос в том, что сделало приложение. Есть только несколько распространённых ответов.
Процесс приложения не запущен или падает. Самая частая причина на большом расстоянии. Фасад пытается подключиться и получает «соединение отказано», потому что ничего не прослушивает, или процесс принимает запрос и падает во время ответа. Проверьте, действительно ли приложение запущено, и прочитайте его собственные журналы в поисках краша или убийства по исчерпанию памяти в момент ошибки - журналы фасада будут только говорить, что вышестоящий не удался, никогда почему.
Несовпадение тайм-аута между слоями. Если приложение отвечает дольше, чем фасад готов ждать, некоторые прокси сообщают об этом как о 502, а не о 504, закрывая соединение и называя половину-готовый ответ плохим. Когда 502 коррелирует с медленными запросами, а не с крахами, смотрите здесь.
Плохое развёртывание. Новая сборка, которая не загружается, прослушивает неправильный порт или отвечает заголовками, которые фасад отклоняет, превратит каждый запрос в 502 в момент развёртывания. Если ошибки начались при развёртывании, это первое место для проверки, и откат быстрее, чем диагностика.
Что-то между слоями. Неправильно настроенный proxy_pass, имя хоста вышестоящего сервера, которое больше не разрешается, группа безопасности, которая тихо перестала позволять фасаду достичь приложения - соединение никогда не завершается и фасад сообщает о плохом шлюзе. Это самые медленные в поиске, потому что ничего не рухнуло; звено в цепи просто перестало пропускать трафик.
Почему эти ошибки так сложно отследить позже
Ошибка 502 часто исчезает к тому времени, когда кто-нибудь её посмотрит. Рухнувший работник перезагружается, развёртывание откатывается, всплеск трафика проходит, и журнал фасада говорит только, что запрос вышестоящего не удался в 09:14 - не что сказал вышестоящий, не какой процесс, не почему.
То, что разрешает это, - это доказательство, захваченное пока это происходит: запрос, который не удался, точный статус, время и то, что человек делал, когда это появилось. Ошибка 502, которую пользователь сообщает час спустя, по памяти, - это предположение. Ошибка 502 с неудачным запросом и его временной меткой - это строка, которую можно сопоставить с журналом приложения и историей развёртывания и закрыть.
Session Replay
Бесплатное расширение Chrome. Один клик на странице, где что-то работает неправильно, захватит скриншот, консоль и журнал сети, и выдаст вам ссылку для вставки в тикет.
Журнал сети содержит неудачный запрос с его 502 и момент, когда он произошёл, сохранённый тогда, когда что-то пошло не так, а не вспомненный позже - что является различием между отчётом, на который кто-то может действовать, и одним, который они должны сначала воспроизвести.
В одном абзаце
Ошибка 502 Bad Gateway - это сообщение сервера первой линии о том, что сервер позади него дал ответ, который он не мог использовать - рухнул, отказал или был неправильный, - и она приходит быстро, что отличает её от медленного 504. Если вы посетитель, перезагрузитесь один раз, а затем предположите, что это их проблема. Если это ваша, проверьте, запущено ли приложение и что оно записало в журнал, подозревайте последнее развёртывание, если время подходит, и захватите неудачный запрос, пока вы его имеете, потому что ошибка 502 почти невозможна для отслеживания, как только она прошла.