Содержание10
Ошибка 503 Service Unavailable значит, что сервер жив, но прямо сейчас не может обработать запрос: он перегружен или закрыт на обслуживание. В отличие от 500, это временный отказ, после которого сайт должен вернуться сам. Если 503 держится часами или повторяется каждый вечер, сайт упирается в лимиты, и их нужно искать.
Что значит ошибка 503
Ошибка 503 — «сервис временно недоступен». Спецификация HTTP (RFC 9110) описывает её так: сервер сейчас не может обработать запрос из-за временной перегрузки или планового обслуживания, и это, скорее всего, пройдёт через некоторое время. Вместе с ответом сервер может прислать заголовок Retry-After — подсказку, сколько подождать перед повтором.
MDN называет две главные причины: сервер закрыт на обслуживание или перегружен. В справочнике кодов Яндекс Вебмастера формулировка та же: ошибка возникла из-за временной перегрузки или отключения сервера на техническое обслуживание.
Есть тонкость, которая сбивает при диагностике. RFC отмечает: при перегрузке сервер не обязан отвечать 503 — некоторые серверы просто отклоняют соединение. Поэтому одна и та же перегрузка в разные минуты выглядит то как 503, то как обрыв загрузки, то как 504 от прокси.
Ошибка 503 — честное «зайдите позже». Сервер не сломан, но сейчас не справляется или закрыт на работы.
Почему сервер отвечает 503
Ответ 503 отдаёт не только сам сервер, но и всё, что стоит перед сайтом: прокси, защита от ботов, панель хостинга. Вот частые источники:
- Пик нагрузки — рекламная кампания, рассылка, распродажа. MDN пишет, что приложения отклоняют запросы с 503, когда упираются в пороги памяти, процессора или пула соединений.
- Лимиты тарифа хостинга — на виртуальном хостинге число процессов и доля процессора ограничены. Сайт выходит за лимит, и хостинг отказывает лишним запросам.
- Ограничение частоты в nginx — модули limit_req и limit_conn по умолчанию отклоняют лишние запросы именно кодом 503.
- Режим техработ — CMS или администратор закрыли сайт на обновление и забыли открыть.
- Боты и атаки — парсеры, агрессивные краулеры, DDoS съедают ресурсы, предназначенные посетителям.
- Остановленный бэкенд — PHP-FPM или приложение за прокси перезапускается, и прокси временно отвечает отказом.
Если 503 появляется в одно и то же время, ищите расписание: резервное копирование, импорт каталога, задачи cron. Если совпадает с рекламой или рассылкой — это пик посетителей.
Полезно посмотреть и на саму страницу ошибки. Фирменная заглушка хостинга с логотипом провайдера значит, что отказал хостинг или его защита, а сайт до запроса даже не дошёл. Голая строка Service Unavailable от nginx указывает на ограничение частоты или на бэкенд за прокси. Страница в дизайне сайта с текстом про техработы — режим обслуживания CMS.
503 или 429: какой код при ограничении запросов?
Когда сервер режет запросы одного клиента — бота, парсера, слишком активного пользователя, — правильнее отвечать 429 Too Many Requests. MDN прямо разводит коды: при ограничении запросов конкретных клиентов уместен 429, а 503 оставляют для состояния всего сервера.
Здесь у nginx свой подвох. Модуль limit_req по умолчанию отвечает кодом 503, и владелец видит в журнале «сервис недоступен», хотя сервер в порядке и отказ получил один бот. Код можно переопределить директивой limit_req_status:
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
server {
location / {
limit_req zone=perip burst=20;
limit_req_status 429;
}
}
Числа в примере условные: порог подбирают по журналу запросов конкретного сайта. Со стороны поиска коды тоже различаются. Яндекс не учитывает заголовок Retry-After в ответе 429, а Google воспринимает и 429, и 5xx как сигнал перегрузки и замедляет обход.
Мнение. Если ограничение частоты запросов в nginx срабатывает на ботов, переключите его на 429: в журналах станет видно, где перегрузка сервера, а где отсечённый парсер.
Как понять, что именно перегружено?
Перед тем как покупать тариф мощнее, выясните, кто съедает ресурсы. Порядок такой:
Если нагрузка на сервере высокая, а посетителей в Метрике мало, ресурсы съедают роботы. Метрика роботов почти не видит, поэтому смотрите журнал доступа: какие User-Agent и адреса делают больше всего запросов.
Что делать с ошибкой 503 прямо сейчас
Первая задача — вернуть сайт посетителям, вторая — найти причину. Последовательность для владельца:
- 01 Проверьте режим техработ
Если сайт закрывали на обновление, убедитесь, что режим выключен.
- 02 Отключите тяжёлое
Остановите импорт, отложите резервное копирование, выключите ресурсоёмкий модуль на время пика.
- 03 Отсеките лишних ботов
Заблокируйте агрессивные краулеры и парсеры по журналу доступа, но не трогайте поисковых роботов.
- 04 Включите кэширование
Готовые страницы из кэша отдаются без PHP и базы данных и снимают основную нагрузку.
- 05 Напишите в поддержку хостинга
Спросите, в какой лимит упирается сайт, и попросите временно его поднять.
Где ошибаются: лечат 503 бесконечной перезагрузкой PHP, блокируют всех ботов подряд вместе с поисковыми и сразу переезжают на дорогой сервер, не найдя, кто создаёт нагрузку. Переезд без диагностики переносит проблему вместе с сайтом.
Как закрыть сайт на техработы с кодом 503
Плановые работы — законный повод отдавать 503. Google в справке о приостановке сайта советует: если нужно срочно заблокировать сайт на один-два дня, показывайте вместо контента информационную страницу с кодом ошибки 503. Для более долгого закрытия этот способ уже не годится.
Правила из той же справки:
- Retry-After — заголовок подсказывает, когда можно прийти снова. Значение — дата или число секунд.
- Статичный HTML — страница-заглушка без внешних ресурсов, встроенные стили, ничего от упавшей CMS.
- robots.txt не трогать — Google предупреждает, что 503 для robots.txt полностью заблокирует сканирование.
- Проверка curl — после включения заглушки убедитесь, что сервер действительно отдаёт 503, а не 200.
Пример для nginx: весь сайт отвечает 503 со страницей-заглушкой, а robots.txt остаётся доступным.
server {
server_name site.ru;
root /var/www/site;
add_header Retry-After 3600 always;
error_page 503 /maintenance.html;
location = /maintenance.html {
}
location = /robots.txt {
}
location / {
return 503;
}
}
Яндекс в справочнике кодов предлагает для техработ временный редирект 302. Разница в том, что 302 уводит посетителя и робота на другой адрес, а 503 оставляет их на месте с честным сообщением. Для коротких работ на том же адресе удобнее 503.
Как ошибка 503 влияет на поиск?
Короткая 503 поиску почти не вредит, длинная — вредит. Google пишет, что при ошибках 5xx и 429 его роботы временно замедляют сканирование, а уже проиндексированные адреса сохраняются в индексе, но в скором времени удаляются.
Факт. Google не рекомендует отдавать коды 500, 503 или 429 для снижения частоты сканирования дольше двух дней: могут возникнуть проблемы с показом контента сайта.
Яндекс строже к отдельной странице: страница с кодом ответа, отличным от 200 OK, не может попасть в поиск. Если робот пришёл во время 503, страница рискует выпасть до следующего обхода. Поэтому техработы планируют на время минимальной посещаемости и держат как можно короче.
Особый риск — 503 на главной из-за защиты от ботов, которая по ошибке режет поисковых роботов. Сайт работает у людей, а для поиска он недоступен. Проверьте ответ главной в инструменте Яндекс Вебмастера «Проверка ответа сервера».
Как не упираться в 503 снова
Повторяющаяся 503 — признак того, что сайт живёт на пределе ресурсов. Что помогает:
- Кэш страниц — главная, каталог и статьи отдаются готовыми, без PHP и базы данных.
- Тариф с запасом — лимиты процессов и памяти выше обычного пика, а не впритык.
- Расписание тяжёлых задач — импорт и резервное копирование ночью, вне пиков.
- Фильтр ботов — ограничение частоты с кодом 429 для агрессивных краулеров.
- Мониторинг — внешняя проверка, которая сообщит о 503 раньше, чем позвонит клиент.
Кэш даёт самый большой выигрыш за наименьшие деньги: страница из кэша не запускает PHP и не ходит в базу, поэтому тот же сервер выдерживает заметно больше посетителей. Что ещё ускоряет сайт без программиста, разобрано в статье о том, почему сайт медленно загружается.
Граница: если сайт падает от каждой рассылки даже после кэша и смены тарифа, проблема в коде — тяжёлых запросах к базе, отсутствии индексов, неоптимальных модулях. Тогда нужен разбор приложения, а не новое железо. Как выбрать тариф и не попасть на скрытые лимиты, разобрано в статье про хостинг для сайта.
Если 503 повторяется и непонятно, кто съедает ресурсы, подключите техподдержку сайта: разберём журналы, найдём источник нагрузки и настроим кэш и ограничения.
Источники
- RFC 9110: HTTP Semantics, 503 Service Unavailable и Retry-After — IETF
- 503 Service Unavailable — MDN
- Справочник по кодам статуса HTTP — Яндекс Вебмастер
- Как проверить, что сайт доступен для посетителей и поисковых роботов — Яндекс Вебмастер
- Как приостановить работу сайта — Google
- Как снизить частоту сканирования сайта — Google
- Как коды статуса HTTP влияют на сканирование — Google
- Модуль ngx_http_limit_req_module — nginx
- Мониторинг — Яндекс Метрика