Ошибка сервера 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. Это расчёт при заданных условиях, а не измеренный убыток: часть пользователей вернётся позже, а реальный трафик может быть неравномерным.
Если 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.
Не ограничивайтесь перезапуском сервера. До вмешательства по возможности сохраните логи и метрики: рестарт может временно убрать симптом и уничтожить часть контекста. У подрядчика запрашивайте точный код, время, затронутые компоненты и подтверждённую причину.
Устранение ошибок сервера: порядок действий при инциденте
- Определите масштаб. Проверьте главную, каталог, карточку, корзину, оформление заказа и API. Не проводите реальные платежи без согласованного тестового сценария.
- Проверьте сервисы и зависимости. Веб-сервер может работать, пока приложение или база уже недоступны.
- Остановите распространение сбоя. При подтверждённой связи с релизом откатите его, если откат совместим с текущей схемой БД и данными.
- Уменьшите нагрузку. Приостановите тяжёлые фоновые задачи, ограничьте дорогие запросы, используйте допустимый кэш. Не кэшируйте персональные страницы как общедоступные.
- Восстановите доступность. Переключите трафик на здоровые узлы или включите страницу обслуживания с 503, если полноценная работа невозможна.
- Подтвердите восстановление. Проверьте не только 200, но и содержимое страницы, вход, форму и целевые операции; наблюдайте метрики под обычной нагрузкой.
- Устраните первопричину. Исправьте код, 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 должны исключать неработающие узлы, но не вызывать массовые перезапуски из-за кратковременного отказа общей зависимости.
Если у вас микросервисная архитектура, добавьте единый 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–5 минут, исходя из допустимого времени обнаружения.
- Задайте начальные пороги, например доля 5xx выше 1% за 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, служебные файлы и оставшиеся технические ошибки. Проверьте свой сайт бесплатно.
Источники
- RFC 9110: HTTP Semantics — значения статусов HTTP и семантика Retry-After.
- MDN: HTTP response status codes — справочник стандартных кодов ответа.
- Google Search Central: HTTP and network errors — обработка серверных и сетевых ошибок поисковым роботом.
- Google Search Central: robots.txt — особенности обработки ошибок при получении robots.txt.
- Яндекс Вебмастер: Помощь — контроль доступности сайта и диагностика индексирования.
- Nginx: ngx_http_log_module — форматы access log и дополнительные поля журналирования.