UptimeChecker

Сайт упал: чек-лист диагностики

Обложка: Сайт упал: чек-лист диагностики

Сначала: сайт действительно упал?

«Сайт упал» — это диагноз, который нужно поставить, а не принять на веру. Прежде чем будить разработчика или писать в поддержку хостинга, потратьте две минуты и ответьте на главный вопрос: сайт недоступен для всех или только для вас. От этого зависит, где искать причину.

Первый шаг — внешняя проверка. Откройте инструмент проверки доступности сайта и введите свой домен. Проверка выполняется с независимых серверов, а не из вашей сети, поэтому она показывает объективную картину.

Результат внешней проверки Что это значит Куда копать дальше
HTTP 200, нормальное время Сайт жив, проблема локальная Раздел «Сайт не открывается только у меня»
HTTP 5xx Ошибка на стороне приложения/сервера Раздел «Ошибки сервера» ниже
Timeout, нет ответа Сервер или сеть не отвечают Разделы про сеть, DNS, хостинг
TLS-ошибка Проблема с сертификатом Раздел «SSL-сертификат»

Если внешняя проверка показывает, что сайт жив, а у вас он не открывается, — это локальная проблема вашего устройства или сети. Ей посвящён отдельный материал: «Сайт не открывается только у меня: что делать». Дальше в этой статье разбираем случай, когда сайт действительно недоступен для всех.

Чек-лист диагностики: от простого к сложному

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

  1. Внешняя проверка доступности. Подтвердите, что проблема глобальная.
  2. HTTP-код ответа. Поймите, на каком слое падает запрос.
  3. DNS-записи. Убедитесь, что домен указывает туда, куда нужно.
  4. Порт и соединение. Проверьте, открыт ли порт 443.
  5. SSL-сертификат. Исключите просрочку или неверную выдачу.
  6. Логи сервера. Найдите конкретную ошибку.
  7. Ресурсы хостинга. Проверьте CPU, память, диск, трафик.

Шаг 1. Определите HTTP-код ответа

Код ответа — самый информативный первый сигнал. Снимите его напрямую, без браузера:

curl -I -L https://example.com

Первая строка вывода — версия протокола и код:

HTTP/2 500

Или, при редиректах, последовательность кодов. Вот расшифровка самых частых:

Код Значение Типичная причина Куда смотреть
500 Internal Server Error Ошибка в коде, PHP/backend Логи ошибок приложения
502 Bad Gateway Backend (PHP-FPM, proxy) не отвечает Статус PHP-FPM/backend, логи
503 Service Unavailable Перегрузка, обслуживание, лимиты Ресурсы, конфигурация веб-сервера
504 Gateway Timeout Backend не успел ответить Медленные запросы, БД, ресурсы
403 Forbidden Права доступа, WAF, блокировка Конфигурация прав, правила WAF
404 Not Found Файл/страница удалена, маршрут Конфигурация роутинга, файлы

Важно: коды 502 и 504 почти всегда означают, что сам веб-сервер (nginx, Apache) жив, а вот приложение за ним — нет. Код 503 часто ставят вручную при обновлениях. Ошибка 403 может быть следствием блокировки вашего IP — проверьте, не отличается ли результат внешней проверки от локального.

Ошибка 502 Bad Gateway от nginx

Шаг 2. Проверьте DNS-записи

Частая причина «упавшего» сайта — проблемы с DNS: домен перестал резолвиться, указывает на старый IP или NS-записи сменились некорректно. Проверьте, что реально отдаёт DNS:

dig example.com A +short

Вывод — просто IP-адрес:

93.184.216.34

Если вывод пустой — запись A отсутствует или домен не делегирован. Посмотрите полный набор записей и цепочку NS:

dig example.com NS +short
dig example.com A

Полную картину удобно снять инструментом проверки DNS-записей: он покажет A, AAAA, NS, MX, TXT и CNAME с точки зрения публичных резолверов. Сверьте результат с тем, что должно быть:

  • Запись A должна указывать на актуальный IP сервера (не старый, если вы недавно переезжали).
  • NS-серверы должны совпадать с теми, что прописаны у регистратора.
  • TTL — если вы недавно меняли записи, старые значения могут жить в кэшах до истечения TTL.

Классический сценарий после переезда: домен всё ещё указывает на старый сервер, который уже выключили. Внешне это выглядит как «сайт упал», хотя код и база целы — просто трафик идёт не туда.

Шаг 3. Проверьте порт и сетевое соединение

Если DNS в порядке, а сайт не отвечает, проверьте, доступен ли порт сервера извне:

nc -zv example.com 443

Успешный ответ:

Connection to example.com 443 port [tcp/https] succeeded!

Если порт закрыт или соединение виснет — возможные причины: файрвол блокирует порт, веб-сервер не слушает этот порт, сервис не запущен, или проблема на сетевом уровне хостинга. Для диагностики сети с внешней стороны полезны проверка порта и пинг-проверка: они покажут, доступен ли хост вообще и открыт ли конкретный порт, независимо от вашей сети.

Шаг 4. Проверьте SSL-сертификат

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

openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -dates -subject

В выводе — субъект сертификата и сроки действия:

subject=CN = example.com
notBefore=Jan  1 00:00:00 2025 GMT
notAfter=Jan  1 00:00:00 2026 GMT

Если текущая дата выходит за диапазон notBefore–notAfter — сертификат просрочен. Обратите внимание и на subject: если там другое имя домена, сертификат выдан не на ваш домен.

Отслеживать срок действия заранее помогает инструмент проверки срока SSL-сертификата: он покажет, сколько дней осталось до истечения, и предупредит заранее, чтобы просрочка не стала неожиданностью в самый неподходящий момент.

Шаг 5. Посмотрите логи сервера

Когда внешние проверки не дают однозначного ответа, идите в логи — именно там лежит конкретная причина ошибки. Расположение зависит от стека:

# nginx / Apache — логи доступа и ошибок
tail -n 100 /var/log/nginx/error.log

# системный журнал
journalctl -u nginx --since "10 minutes ago"

Что искать: PHP-фатальные ошибки, ошибки подключения к базе данных (например, connection refused или Too many connections), ошибки прав доступа, сообщения о нехватке памяти (Allowed memory size exhausted). Каждая из них — это конкретный адрес проблемы, а не абстрактное «сайт лежит».

Хвост лога nginx с PHP Fatal error

Шаг 6. Проверьте ресурсы сервера

Если ошибка нестабильная — сайт то открывается, то падает — почти наверняка дело в исчерпании ресурсов. Проверьте базовые показатели:

free -h        # память
df -h          # диск
uptime         # нагрузка (load average)

Таблица типичных сценариев:

Симптом Причина Решение
Load average сильно выше числа ядер Перегрузка CPU Найти тяжёлые процессы, оптимизировать, добавить ресурсы
Память исчерпана, сервер убивает процессы Нехватка RAM, OOM Увеличить RAM, ограничить число workers, swap
Диск заполнен на 100% Логи, бэкапы, кэш Почистить логи, настроить ротацию
503 при всплеске трафика Превышение лимитов хостинга Поднять лимиты, кэширование, балансировка
«Too many connections» в БД Исчерпан лимит соединений Увеличить max_connections, оптимизировать пул

Отдельно стоит проверить, не упёрлись ли вы в лимиты тарифа хостинга: ввод-вывод, количество запросов, исходящий трафик. Многие «падения» — это на самом деле сработавший лимит.

Шаг 7. Проверьте базу данных

Для динамических сайтов (CMS, интернет-магазины, веб-приложения) база данных — самое частое узкое место и самый частый источник ошибок 500/502/504. Даже если сам код в порядке, неработающая БД «роняет» весь сайт.

Проверьте, отвечает ли сервер БД:

mysqladmin -u root -p status

Или, для PostgreSQL:

pg_isready

Ключевые проблемы и их признаки:

Проблема Признак Решение
БД не запущена connection refused в логах приложения Запустить сервис, проверить автозапуск
Исчерпан лимит соединений Too many connections Увеличить max_connections, закрыть «зависшие» соединения
Медленные запросы 504 Gateway Timeout, рост TTFB Найти медленные запросы, добавить индексы
Переполненный диск БД Ошибки записи, отказ транзакций Освободить место, настроить ротацию логов
Репликация отстала Чтение устаревших данных Проверить лаг реплики, устранить причину

Отдельный момент — быстрая проверка именно скорости ответа БД на простейший запрос. Медленный ответ на SELECT 1 говорит о том, что сервер БД перегружен или ему не хватает ресурсов, и это нужно решать до того, как сайт окончательно ляжет.

Шаг 8. Проверьте редиректы и конфигурацию

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

curl -IL https://example.com

Зацикленный редирект (301 на самого себя) или редирект на несуществующую страницу выглядят для пользователя как «сайт не работает», хотя сервер жив. После изменения конфигурации nginx/Apache всегда проверяйте синтаксис перед перезагрузкой:

nginx -t

Что делать, если сайт за CDN или прокси

Если ваш сайт работает за CDN (Cloudflare и аналоги) или за обратным прокси, картина диагностики меняется: снаружи пользователь видит CDN, а не ваш сервер. Это важно понимать, потому что ошибки 5xx при этом могут иметь две разные причины:

  • Сбой на вашем origin-сервере. CDN передаёт ответ вашего сервера, и если origin лежит, CDN честно отдаёт 502/504.
  • Сбой самого CDN. Реже, но бывает: проблемы на стороне CDN-провайдера.

Как разделить: проверьте origin-сервер напрямую, минуя CDN. Определите реальный IP сервера (например, по истории DNS или из панели хостинга) и обратитесь к нему:

curl -I -k --resolve example.com:443:203.0.113.10 https://example.com

Если напрямую сервер отвечает 200, а через CDN — ошибка, проблема на стороне CDN или в его конфигурации (кеш, правила, origin-настройки). Если origin тоже не отвечает — копайте сам сервер по чек-листу выше.

Ещё один нюанс CDN — кеш. После исправления ошибки старый «битый» ответ может какое-то время раздаваться из кеша CDN. Если после починки сайт всё ещё показывает ошибку, проверьте очистку кеша CDN и повторите проверку через инструмент проверки доступности, который запрашивает страницу заново, не из локального кеша.

Что делать, если причина не найдена

Если вы прошли весь чек-лист и не нашли причину, соберите факты и обращайтесь к тому, кто может помочь — в поддержку хостинга или к разработчику. Сформулируйте запрос предметно:

  • Точное время начала недоступности.
  • HTTP-код или текст ошибки из браузера.
  • Результат внешней проверки — скриншот или вывод.
  • Что вы уже проверили и что исключили.

Чем точнее исходные данные, тем быстрее ответит поддержка — вместо «у меня сайт не работает» вы приходите с готовым диагнозом «502 Bad Gateway, backend не отвечает, порт 443 открыт».

Профилактика: чтобы не гадать в следующий раз

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

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

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