Что значит 503 Service Unavailable
503 Service Unavailable — это HTTP-код категории 5xx, означающий «сервер сейчас не может обработать ваш запрос». Главная особенность 503 — это намеренный отказ, в отличие от 500 (bug) или 502 (упавшее приложение).
Сервер сам решает вернуть 503, потому что: идёт обслуживание, превышен rate limit, нет свободных ресурсов, или внешняя зависимость (БД) временно недоступна. Хорошая практика — указывать Retry-After заголовок, сообщающий клиенту когда повторить.
Когда сервер возвращает 503
- Плановое обслуживание. Деплой большой версии, миграция БД, обновление инфраструктуры. Все запросы → 503 + красивая страница «Мы скоро вернёмся».
- Rate limiting. Клиент превысил лимит запросов. Например, 100 запросов/минуту — 101-й получит 503 (или 429 — это более точный код).
- Circuit breaker. Внешний сервис (платёжный шлюз, SMS-провайдер) не отвечает. Чтобы не повесить свой сервис, разрываем circuit и возвращаем 503.
- Health check failed. Endpoint
/healthпроверяет: БД доступна, кэш работает, очереди живы. Если что-то сломалось — возвращает 503. Балансировщик исключает узел из ротации. - Перегрузка. Резкий пик трафика, приложение еле живёт. Лучше отказать новым запросам, чем обработать всех плохо.
- Защита от DDoS. При атаке возвращаем 503 для подозрительного трафика, пускаем только белый список.
- Платёжный шлюз недоступен. На странице оплаты возвращаем 503, чтобы пользователи не пытались купить пока эквайринг не работает.
The 503 (Service Unavailable) status code indicates that the server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay.— RFC 9110 Section 15.6.4
Maintenance mode правильно
Деплой / миграция / обновление — частая причина 503. Как сделать правильно:
Nginx — простой способ
server {
listen 80;
server_name example.com;
# Включить maintenance — раскомментировать
# return 503;
location / {
proxy_pass http://app:3000;
}
# Кастомная maintenance страница
error_page 503 /maintenance.html;
location = /maintenance.html {
root /var/www/static;
internal;
add_header Retry-After "3600";
}
}Nginx — с whitelist для админов
server {
set $maintenance 1;
# Whitelist админов
if ($remote_addr ~ "^(1\.2\.3\.4|5\.6\.7\.8)$") {
set $maintenance 0;
}
if ($maintenance = 1) {
return 503;
}
location / {
proxy_pass http://app:3000;
}
}Health check pattern
// app.js (Node.js / Express)
app.get('/health', async (req, res) => {
try {
await db.query('SELECT 1');
await cache.ping();
res.status(200).json({ status: 'ok' });
} catch (e) {
res.status(503).json({
status: 'unhealthy',
error: e.message,
});
}
});Что делать пользователю
- Подождите. 503 = временно. Большинство сайтов восстанавливают работу за 5-30 минут.
- Проверьте Retry-After в DevTools. Network → выберите запрос → Response Headers. Узнаете точное время.
- Status page. Многие сервисы имеют status.example.com где видно реальное состояние.
- Соцсети сайта. Часто пишут «У нас обслуживание до 14:00» в Twitter / Telegram.
- Поддержка. Если 503 длится дольше часа — напишите. Возможно проблема о которой не знают.
503 и SEO
- Кратковременные 503 (минуты-часы). Не влияют на SEO. Поисковики понимают временную недоступность.
- Retry-After важен. Указывает поисковику когда вернуться. Без него поисковик может посчитать страницу полностью недоступной.
- Длительные 503 (дни). Страницы могут временно выпасть из индекса. Восстанавливаются после возвращения сайта.
- НЕ используйте 200 для maintenance-страницы. Поисковик проиндексирует «Мы скоро вернёмся» как реальный контент. Это soft 5xx — Google штрафует.
- Search Console / Yandex.Webmaster. Регулярно проверяйте раздел «Ошибки сканирования» — много 503 = сигнал проблемы.
- RFC 9110 Section 15.6.4 — 503 Service Unavailable. IETF. datatracker.ietf.org/doc/html/rfc9110#section-15.6.4. 2022.
- Best practices for maintenance pages. Google Search Central. developers.google.com/search/docs/crawling-indexing/scheduled-downtime. 2024.
- Yandex Webmaster — обработка серверных ошибок. Яндекс. yandex.ru/support/webmaster. 2024.
