Ошибка сервера 5xx — это группа HTTP-статусов: сервер или промежуточный шлюз не смог выполнить запрос. Основные причины — сбой приложения, перегрузка, недоступность backend и таймауты. Чтобы устранить проблему, определите точный код, сопоставьте время сбоя с логами и проверьте зависимости. Для SEO важны длительность, частота и охват ошибок.

500 обычно направляет диагностику к приложению, 502 — к связи прокси с backend, 503 — к доступности сервиса, 504 — к ожиданию ответа upstream. Однако код показывает симптом, а не окончательную причину. Для восстановления сайта нужны журналы ошибок, метрики ресурсов и проверка последних изменений.

Что означает ошибка сервера 5xx и почему она возникает

Коды 5xx обозначают ситуации, когда сервер не смог выполнить запрос или не поддерживает необходимую для этого функциональность. Ответ может сформировать не сам сайт, а reverse proxy, CDN, балансировщик или API-шлюз. Поэтому наличие 502 в браузере ещё не означает, что запрос дошёл до приложения.

Отсутствие HTTP-ответа — другая ситуация. Например, ошибка DNS, отказ TCP-соединения или сбой TLS сами по себе не являются HTTP 5xx. Но посредник, столкнувшийся с такой проблемой при обращении к origin-серверу, может вернуть клиенту собственный код ошибки.

Чем 5xx отличаются от других HTTP-кодов

  • 2xx — запрос успешно обработан.
  • 3xx — нужны дополнительные действия: например, переход по другому адресу; 304 разрешает использовать сохранённый ответ.
  • 4xx — проблема связана с запросом, доступом или запрошенным ресурсом. Это не обязательно ошибка пользователя: причиной может быть неверная ссылка или настройка сайта.
  • 5xx — сервер или посредник не смог выполнить запрос.

Основные причины ошибок 5xx

  • Исключение в коде, неудачное обновление CMS, плагина или зависимостей.
  • Нехватка RAM, заполнение диска, исчерпание файловых дескрипторов или пула соединений.
  • Остановка PHP-FPM, Node.js, другого backend-процесса или пула IIS.
  • Недоступность базы данных, кэша, очереди или внешнего API.
  • Медленные SQL-запросы, блокировки и превышение таймаутов.
  • Ошибочные адреса upstream, права на сокеты, переменные окружения или настройки маршрутизации.
  • Перегрузка из-за обычного трафика, тяжёлых запросов, ботов или атаки.

Рост TTFB иногда предшествует отказам, но не доказывает их причину. Сопоставляйте время ответа сервера с загрузкой ресурсов, очередями и длительностью запросов к зависимостям.

Основные коды ошибок сервера 5xx: значение и первые проверки

КодЗначениеТипичная ситуацияПервая проверка
500 Internal Server ErrorНепредвиденная внутренняя ошибкаИсключение приложения, сбой обработчика, цикл внутренних перенаправленийЛоги приложения и веб-сервера, последние изменения
501 Not ImplementedСервер не поддерживает функциональность, необходимую для запросаСервер не распознаёт метод и не может поддержать его ни для одного ресурсаМетод запроса и возможности сервера; если известный метод запрещён только для ресурса, обычно нужен 405
502 Bad GatewayШлюз получил некорректный ответ от upstreamОбрыв соединения, некорректные заголовки, недоступный backend в конкретной реализации проксиСостояние backend, сокет, порт, сеть, upstream error log
503 Service UnavailableСервис временно не может обработать запросПерегрузка, технические работы, отсутствие доступных узловРесурсы, очереди, health checks, режим обслуживания
504 Gateway TimeoutШлюз не дождался своевременного ответа upstreamМедленная БД, внешний API, перегруженный backendВремя обращения к зависимостям и настройки таймаутов
505 HTTP Version Not SupportedСервер не поддерживает основную версию HTTP из запросаНесовместимость протоколаВерсию HTTP на проблемном участке цепочки; TLS проверяется отдельно
507 Insufficient StorageНедостаточно места для сохранения представления, необходимого для выполнения запросаОшибка хранилища в WebDAV и некоторых APIСвободное место, квоты и журналы хранилища; обычное заполнение диска не обязательно даст 507
508 Loop DetectedОбнаружен бесконечный цикл при обработке WebDAV-запросаЦиклическая обработка операции WebDAVСтруктуру ресурсов и параметры операции; обычные циклы редиректов не равнозначны 508

Также существуют редкие стандартизованные статусы 506 и 511. Код 506 связан с ошибкой конфигурации согласования представлений, 511 — с необходимостью сетевой аутентификации, например в сети с captive portal. CDN могут использовать собственные коды 52x: их значение нужно уточнять в документации конкретного провайдера, а не переносить на все серверы.

Сфера ошибки важна не меньше кода. Ошибка 500 только у одной карточки товара указывает на данные или обработчик этой страницы. Ошибка 503 на всех разделах требует проверки общей инфраструктуры, балансировщика и режима техработ.

Влияние ошибок 5xx на SEO и индексацию

Влияние ошибок на SEO зависит от частоты, длительности и числа затронутых URL. При серверных сбоях поисковый робот может снижать интенсивность обхода. Если страницы остаются недоступными продолжительное время, они могут исчезнуть из индекса. Универсального безопасного срока в минутах или часах нет: поведение зависит от поисковой системы и истории доступности ресурса.

  • Краткий единичный сбой обычно не приводит к устойчивой потере видимости, но может сорвать конкретные посещения.
  • Повторяющиеся ошибки мешают обновлять содержимое страниц в поиске и расходуют возможности обхода.
  • 5xx на robots.txt могут привести к приостановке обхода в соответствии с правилами конкретной поисковой системы.
  • 5xx на sitemap.xml мешают получить карту сайта и могут замедлить обнаружение новых URL. Сами по себе они не останавливают обход уже известных страниц.
  • 5xx у JS-файлов и API контента могут помешать рендерингу, даже если основной HTML возвращает 200.

Не маскируйте страницу сбоя статусом 200 и не перенаправляйте все проблемные URL на главную. Во время временных технических работ возвращайте 503; после восстановления — нормальный ответ соответствующей страницы. Это точнее передаёт состояние ресурса пользователям, клиентам API и роботам.

Как оценить потери от простоя

Предположим, магазин получает равномерно 1200 визитов в час, конверсия в заказ составляет 1,8%, а сайт полностью недоступен 40 минут. На период простоя приходится 1200 / 60 × 40 = 800 потенциальных визитов. Оценка недополученных заказов: 800 × 0,018 = 14,4, то есть около 14. Это расчёт при заданных условиях, а не измеренный убыток: часть пользователей вернётся позже, а реальный трафик может быть неравномерным.

Совет эксперта Analito

Если 5xx возникают не на всём сайте, а только на части страниц, сравните их по шаблону, типу контента и источнику данных. Часто проблема скрыта не в сервере целиком, а в одном компоненте: фильтре каталога, модуле импорта, поиске по сайту или интеграции с CRM.

Диагностика серверных ошибок: код ответа, логи и метрики

Шаг 1. Зафиксируйте воспроизводимый запрос

Запишите время с часовым поясом, URL, метод, статус, request_id и условия возникновения: после авторизации, при отправке формы, только через CDN или только под нагрузкой. Уточните, затронуты ли все пользователи, отдельный регион или конкретный тип запросов.

Для проверки обычного GET-запроса можно выполнить: curl -sS -D - -o /dev/null https://example.com/catalog/. Команда покажет заголовки, не выводя тело ответа. Проверка через HEAD может дать другой результат, если сервер обрабатывает его иначе. В DevTools смотрите вкладку Network: основной документ, API и статические ресурсы могут возвращать разные статусы.

Шаг 2. Определите, кто сформировал 5xx

Сравните журналы CDN, балансировщика, веб-сервера и приложения за один временной интервал. Заголовки и оформление страницы ошибки дают подсказку, но не являются окончательным доказательством. Проверять origin напрямую следует только при наличии доступа и с сохранением правильных Host и TLS SNI: запрос к IP без них может попасть на другой виртуальный хост.

Шаг 3. Сопоставьте журналы по времени и идентификатору

  • Access log обычно содержит URL, статус и user-agent, но состав зависит от формата. Время обработки есть не всегда: стандартный combined-формат Nginx его не включает. Добавьте поля $request_time, $upstream_response_time и $upstream_status.
  • Error log помогает найти connection refused, upstream timed out, ошибки файлов, сокетов и внутренних перенаправлений.
  • Логи приложения содержат исключения, stack trace и ошибки зависимостей.
  • Журналы БД показывают медленные запросы, блокировки и исчерпание соединений.
  • Системные журналы помогают обнаружить OOM killer, рестарты сервисов, нехватку места и ошибки диска.

Синхронизируйте часы узлов и учитывайте часовые пояса. Иначе записи одного запроса могут ошибочно выглядеть как разные события.

Шаг 4. Проверьте ресурсы и последние изменения

Проверьте CPU, RAM, swap, свободное место и inode, дисковые задержки, число соединений, занятость воркеров и очереди. Сопоставьте начало сбоя с релизом, обновлением зависимостей, изменением секретов, сертификатов или сетевых правил.

СимптомРабочая гипотезаПроверка
500 только на одном шаблонеДефект кода или данныхStack trace, входные данные, версия шаблона
502 после роста трафикаПадение backend или исчерпание его лимитовЖурнал backend, OOM, лимиты процессов и соединений
503 на всём сайтеПерегрузка, maintenance или нет здоровых узловБалансировщик, health checks, очереди и флаг техработ
504 на поиске и фильтрахМедленная БД или внешний APIТрассировка, slow query log, блокировки, длительность внешних вызовов
5xx преимущественно у роботовWAF, ограничения, тяжёлые URL или отдельный маршрутЛоги защиты, URL и частоту запросов; user-agent сам по себе не подтверждает личность робота

Отчёты Яндекс Вебмастера и Search Console используйте для анализа ошибок, полученных поисковыми роботами. Они могут обновляться с задержкой. Для оперативного обнаружения нужны логи, метрики и внешний мониторинг. Отдельная проверка robots.txt полезна для контроля его доступности, но проверка HTML не заменяет диагностику 5xx.

Опасная ошибка

Не ограничивайтесь перезапуском сервера. До вмешательства по возможности сохраните логи и метрики: рестарт может временно убрать симптом и уничтожить часть контекста. У подрядчика запрашивайте точный код, время, затронутые компоненты и подтверждённую причину.

Устранение ошибок сервера: порядок действий при инциденте

  1. Определите масштаб. Проверьте главную, каталог, карточку, корзину, оформление заказа и API. Не проводите реальные платежи без согласованного тестового сценария.
  2. Проверьте сервисы и зависимости. Веб-сервер может работать, пока приложение или база уже недоступны.
  3. Остановите распространение сбоя. При подтверждённой связи с релизом откатите его, если откат совместим с текущей схемой БД и данными.
  4. Уменьшите нагрузку. Приостановите тяжёлые фоновые задачи, ограничьте дорогие запросы, используйте допустимый кэш. Не кэшируйте персональные страницы как общедоступные.
  5. Восстановите доступность. Переключите трафик на здоровые узлы или включите страницу обслуживания с 503, если полноценная работа невозможна.
  6. Подтвердите восстановление. Проверьте не только 200, но и содержимое страницы, вход, форму и целевые операции; наблюдайте метрики под обычной нагрузкой.
  7. Устраните первопричину. Исправьте код, SQL, конфигурацию или ограничения ресурсов и добавьте проверку против повторения.

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

Какие меры предотвращают повторные сбои

  • Нагрузочные тесты для критичных маршрутов и ожидаемых пиков трафика.
  • Лимиты ресурсов и соединений с учётом доступной памяти, а не произвольное увеличение числа воркеров.
  • Кэширование там, где допустима неактуальность данных, с защитой от одновременного пересоздания кэша.
  • Таймауты внешних вызовов, ограниченные повторы и circuit breaker.
  • Постепенное развёртывание релизов, smoke-тесты и подготовленный откат.
  • Проверенные резервные копии и сценарии восстановления.

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

Как правильно обрабатывать HTTP 5xx ошибки в API и на веб-сервере

Статус, тело ответа и идентификатор запроса

API должен возвращать соответствующий ситуации HTTP-статус и стабильную структуру ошибки. Например, при временной перегрузке — 503 и JSON вида: {"error":"service_unavailable","message":"Сервис временно недоступен","request_id":"7f3a9c2d"}. Заголовок Content-Type должен соответствовать формату ответа.

Пользователю не нужны stack trace, SQL-запросы, пути к файлам, токены и адреса внутренних сервисов. Полную диагностику сохраняйте в защищённых логах, связывая её с request_id. Ошибки валидации и доступа не следует превращать в универсальный 500: для них выбирают подходящие 4xx.

503 и заголовок Retry-After

Для временной недоступности можно добавить Retry-After с числом секунд или HTTP-датой. Например, Retry-After: 120 сообщает клиенту рекомендуемое ожидание 120 секунд. Это рекомендация, а не гарантия восстановления или точного времени повторного обхода роботом. Возвращайте реалистичное значение, если можете его оценить.

Безопасные повторы запросов

  • Ограничивайте число попыток и общий бюджет времени.
  • Используйте увеличивающуюся задержку и случайный разброс — exponential backoff с jitter.
  • Учитывайте Retry-After, если он присутствует и поддерживается клиентом.
  • Не повторяйте автоматически создание заказа или списание денег без предусмотренного сервером механизма идемпотентности.
  • Помните: 504 не доказывает, что операция не выполнилась. Backend мог завершить её после истечения ожидания шлюза.

На веб-сервере настройте пользовательскую страницу ошибки с сохранением исходного статуса. Убедитесь, что обработчик ошибки сам не зависит от упавшей БД и не создаёт цикл перенаправлений. Health checks должны исключать неработающие узлы, но не вызывать массовые перезапуски из-за кратковременного отказа общей зависимости.

Совет эксперта Analito

Если у вас микросервисная архитектура, добавьте единый correlation ID в запросы между сервисами. Тогда 502 и 504 можно будет связать с конкретным узким местом, а не искать причину по разрозненным логам.

Частые причины 5xx в Nginx, Apache и IIS

Nginx: upstream, сокеты и внутренние перенаправления

  • 502: проверьте работу PHP-FPM или другого backend, адрес proxy_pass/fastcgi_pass, доступность порта, путь к сокету и права на него.
  • 504: сопоставьте сообщение upstream timed out с длительностью SQL и внешних вызовов. Проверьте таймауты соответствующего модуля: proxy или FastCGI.
  • 500: ищите ошибки приложения, циклы внутренних перенаправлений, а также некоторые ошибки работы с временными файлами. Ориентируйтесь на конкретное сообщение error log.

Проверяйте конфигурацию командой nginx -t перед перезагрузкой. Некорректный include обычно вызывает ошибку проверки, запуска или применения конфигурации, а не HTTP 500. При неудачной перезагрузке работающий Nginx обычно продолжает использовать прежнюю конфигурацию.

Apache: .htaccess, PHP и лимиты обработчиков

  • 500: возможны ошибки директив в .htaccess, неподдерживаемые настройки, сбои модулей или PHP. Причину уточняйте по error log.
  • 503: проверьте доступность backend в прокси-схеме, режим обслуживания и состояние обработчиков. Исчерпание лимитов не всегда приводит именно к 503.
  • 504: при работе Apache как прокси исследуйте ожидание ответа upstream и его зависимости.

Выполните apachectl configtest или аналогичную команду для своей установки. Учитывайте, что такая проверка не заменяет запросы к URL, использующим .htaccess: эти файлы могут читаться при обработке запроса. Настройки MaxRequestWorkers согласуйте с моделью обработки и потреблением памяти.

IIS: application pool, web.config и запуск приложения

  • 500: проверьте исключения приложения и конфигурацию. Например, 500.19 указывает на проблему конфигурационных данных.
  • 503: проверьте состояние application pool, rapid-fail protection, права учётной записи и события остановки.
  • 502.5: в конфигурациях ASP.NET Core с out-of-process hosting может означать неудачный запуск процесса backend. Для in-process hosting возможны другие диагностические коды, включая 500.30.

Изучайте поля sc-status, sc-substatus и sc-win32-status в журнале IIS, Event Viewer и Failed Request Tracing. Подстатусы IIS — уточнения диагностики, а не отдельные трёхзначные HTTP-коды.

Внешнее определение CMS даёт лишь подсказку и не подтверждает серверный стек. Источник истины — конфигурация развёртывания, процессы и журналы. Проверка HTTPS помогает отдельно выявить проблемы TLS, но не объясняет сама по себе причину HTTP 500.

Мониторинг 5xx и быстрое реагирование

Используйте три уровня контроля: внешние проверки доступности, серверные метрики и наблюдение за приложением. Внешняя проверка покажет, что видит посетитель; внутренние данные помогут понять причину.

Какие показатели собирать

  • Число и долю 5xx по сервису, коду, маршруту и узлу.
  • Время ответа: медиану, p95 и p99, отдельно для успешных и ошибочных запросов.
  • Занятость воркеров, длину очередей, соединения с БД и длительность внешних вызовов.
  • CPU, RAM, диск, inode и число перезапусков процессов.
  • Доступность robots.txt, sitemap.xml и критичных пользовательских сценариев.

Доля 5xx = количество ответов 5xx / количество всех HTTP-ответов за тот же период × 100%. Например, при 60 ошибках из 10 000 ответов показатель равен 0,6%. Сетевые сбои без HTTP-ответа учитывайте отдельно: в этой формуле их нет.

Как настроить оповещения и эскалацию

  1. Выберите интервал внешних проверок, например 1–5 минут, исходя из допустимого времени обнаружения.
  2. Задайте начальные пороги, например доля 5xx выше 1% за 5 минут, и откалибруйте их по трафику и требованиям сервиса. Это пример, а не универсальная норма.
  3. Для малопосещаемых критичных маршрутов используйте также абсолютное число сбоев и синтетические проверки: процент на малой выборке нестабилен.
  4. В уведомление включите сервис, время, код, масштаб, ссылку на график и журнал.
  5. Назначьте ответственного и порядок эскалации. Подготовьте runbook с проверками, допустимыми действиями и условиями отката.

Для SEO отдельно проверяйте статусы служебных файлов и посадочных страниц, ошибки загрузки ресурсов рендеринга и доступность для подтверждённых поисковых роботов. После восстановления сопоставьте эти данные с отчётами индексации и динамикой позиций. Совпадение по времени не доказывает причинность: учитывайте другие изменения сайта и поисковой выдачи.

  • Есть внешний мониторинг, а не только проверка работающего процесса.
  • Оповещения учитывают частичные сбои и критичные операции.
  • Логи хранятся достаточно долго для расследования и защищены от переполнения диска.
  • После релиза проверяются ключевые страницы и API.
  • После инцидента фиксируются причина, длительность, охват и меры предотвращения.

Безопасность и стабильность во время серверных ошибок

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

  • Не включайте публичный debug-режим: подробные ошибки могут раскрыть секреты и структуру приложения.
  • Не исправляйте права универсальным доступом вроде chmod 777. Выдавайте только необходимые разрешения конкретной учётной записи.
  • Не отключайте WAF и аутентификацию целиком ради проверки. Используйте узкое временное правило с контролем и последующим откатом.
  • Не записывайте в логи пароли, токены, платёжные данные и полные чувствительные тела запросов.
  • Настройте ротацию журналов: массовые ошибки могут заполнить диск и усугубить отказ.
  • Ограничивайте подозрительную активность на подходящем уровне защиты. Для ограничения частоты запросов конкретного клиента обычно применяют 429, а не маскируют всё статусом 503.

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

Частые вопросы об ошибках 5xx

Может ли посетитель исправить ошибку сервера 5xx?

Обычно причина находится вне его контроля. Можно подождать и повторить открытие страницы. При ошибке после оплаты или отправки заказа сначала проверьте результат операции: повторная отправка может создать дубликат. Владельцу сайта полезно сообщить время, URL и идентификатор ошибки, не передавая секретные данные.

Как выбрать направление диагностики по коду 500, 502, 503 или 504?

При 500 начните с логов приложения и веб-сервера. При 502 проверьте связь прокси с backend и корректность его ответа. При 503 — доступность сервиса, перегрузку и техработы. При 504 — ожидание upstream, медленные запросы и внешние зависимости. Затем подтвердите гипотезу журналами.

Когда 5xx начинают угрожать индексации?

Универсального порога нет. Наибольший риск создают длительные и повторяющиеся сбои: поисковый робот может замедлить обход, а при продолжительной недоступности страницы могут исчезнуть из индекса. Отдельно контролируйте robots.txt: его недоступность способна повлиять на обход всего сайта.

Нужно ли отдавать 503 при технических работах?

Если сервис временно не может выполнить запрос — да, 503 подходит для такой ситуации. Сохраните этот статус у страницы обслуживания и при обоснованной оценке добавьте Retry-After. Не возвращайте 200 с текстом «сайт недоступен» и не рассчитывайте, что 503 сохранит индексацию при неограниченно долгом простое.

Можно ли автоматически повторять любой запрос после 5xx?

Нет. Используйте ограниченное число повторов с задержкой и случайным разбросом только для операций, которые допускают повторное выполнение. Для создания заказов и платежей нужен поддерживаемый сервером механизм идемпотентности. При таймауте результат операции может быть неизвестен, а не обязательно отрицателен.

Почему сайт возвращает 200, но пользователь всё равно видит ошибку?

Основной HTML может загружаться успешно, пока API или JS-файл возвращает 5xx. Возможен и другой случай: страница ошибки ошибочно отправляется со статусом 200. Проверяйте сетевые запросы и содержимое ответа, а не только статус главного документа.

Итог: как восстановить сайт и снизить риск повторения 5xx

Рабочая последовательность — зафиксировать запрос, определить источник статуса, сопоставить логи и метрики, восстановить критичные функции и устранить первопричину. Для SEO важно вернуть корректные ответы страниц и служебных файлов, а не скрыть сбой за 200. Для устойчивости нужны контролируемые релизы, ограниченные повторы, наблюдаемость и понятный план реагирования.

После восстановления доступности проведите SEO-аудит сайта: проверьте статусы важных URL, служебные файлы и оставшиеся технические ошибки. Проверьте свой сайт бесплатно.

Источники