Как устранить ошибку 500 в браузере
Что проверяют
Есть ли у вас порядок действий при инциденте, а не набор случайных перезапусков. Интервьюер хочет услышать, как вы находите компонент, вернувший ошибку, и почему сначала восстанавливаете сервис, а потом ищете причину. Следом часто спрашивают, чем 500 отличается от 502 и 504.
Как отвечать
Браузер только показывает ответ, поэтому первым делом выясните, кто его отдал:
- масштаб: у всех пользователей или у части, на всех адресах или на одном, с какого момента. Совпадает с выкладкой, значит самый быстрый путь это откат, разбор потом;
- источник: вкладка Network в DevTools или
curl -vпокажут заголовки и тело. Стандартная страница nginx и JSON от приложения ведут в разные места. Если в ответе естьX-Request-ID, по нему запрос находится во всех логах; - соседние коды: 500 обычно генерирует само приложение, 502 значит, что прокси не получил нормальный ответ от бэкенда, 503 что нет живых экземпляров, 504 что бэкенд не уложился в таймаут;
- логи и метрики:
error.logи access log nginx с$upstream_statusи$upstream_response_time, логи приложения, в Kuberneteskubectl logs --previousиkubectl describe pod(там видныOOMKilledиCrashLoopBackOff), на хостеjournalctl -u. В Prometheus доля 5xx по метрике вродеhttp_requests_total{status=~"5.."}, трассировка через OpenTelemetry, исключения в трекере ошибок.
Типовые причины: необработанное исключение после релиза, забытая переменная окружения или секрет, не накатанная миграция, исчерпанный пул соединений с базой, закончившееся место на диске.
Закончите профилактикой: алерт на долю 5xx вместо ручного наблюдения, проверка после выкладки с автоматическим откатом, постмортем без поиска виноватых.
Где спотыкаются
Сразу перезапускают сервис. Иногда это помогает, но вместе с контейнером пропадают его логи и состояние, и причина остаётся неизвестной до следующего раза.
Не различают 500, 502 и 504 и ищут не там: копаются в коде приложения, когда оно вообще не отвечает, или в настройках прокси, когда падает запрос к базе.
Начинают с браузера: чистят кеш и cookies, пробуют другой браузер. Код 500 формирует сервер, клиентская сторона на него почти не влияет.