О Обходчик
← Блог

Ошибка 500 на сайте: что значит и как найти причину

Код 500 ничего не говорит о причине: он лишь сообщает, что на сервере что-то пошло не так. Разбираем, где искать подробности и в каком порядке проверять.

Руслан Хуснутдинов, основатель Обходчика около 6 мин чтения

Ошибка 500 на сайте означает, что сервер получил запрос, но на полпути споткнулся и не смог собрать ответ. Это не проблема браузера, интернета или устройства посетителя: ломается что-то на стороне сайта. Конкретная причина в самом коде 500 не указана, её нужно искать в журнале ошибок сервера.

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

Что на самом деле означает код 500

Код 500 Internal Server Error описан в RFC 9110: сервер столкнулся с непредвиденным состоянием и не смог выполнить запрос. Слово «непредвиденным» здесь главное. Сервер не знает, как назвать проблему точнее, поэтому отдаёт самый общий код из группы 5xx.

Для владельца отсюда следует три вещи:

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

Поэтому простая проверка «открывается или нет» часто не ловит такие поломки. Чем живой ответ отличается от рабочего сайта, подробно разобрано в статье Почему аптайм 200 OK ничего не значит.

Чем 500 отличается от 502, 503 и 404

Все эти коды выглядят как «сайт сломался», но причины и действия разные.

Код Что случилось Где искать
500 Приложение или сервер споткнулись при обработке запроса Журнал ошибок веб-сервера и приложения
502 Один сервер получил некорректный ответ от другого (например, от PHP-обработчика) Связка веб-сервера и обработчика, см. разбор ошибки 502
503 Сервер временно не может обработать запрос: перегрузка или обслуживание Нагрузка, режим обслуживания, лимиты хостинга
404 Страницы по этому адресу нет, а сервер работает нормально Адрес и ссылки, см. про ошибку 404

Практический вывод: 404 чаще про адрес, а 500 и 502 про здоровье самого сайта. На них стоит реагировать быстро.

Шесть частых причин

Ниже типичные причины для сайтов на PHP и популярных CMS. Список не исчерпывающий: на другом стеке причины будут другими, но логика поиска та же.

Признак Вероятная причина Что делать
Ошибка появилась сразу после правки кода, обновления плагина или темы Синтаксическая или логическая ошибка в коде Откатить изменение, затем разбираться по логу
Ошибка на всём сайте после правки файла .htaccess Неверная директива в конфигурации Apache Вернуть прежнюю версию файла
В логе сообщения про подключение к базе База данных недоступна или не подошли логин и пароль Проверить доступы в конфиге сайта и статус базы у хостинга
В логе сообщения про исчерпание памяти или времени выполнения Скрипту не хватает лимитов Найти тяжёлый скрипт, при необходимости поднять лимиты
Ошибка при загрузке файлов или сохранении кэша Неверные права на папки или закончилось место на диске Проверить права и свободное место
Ошибка после обновления версии PHP Код или плагин несовместим с новой версией Вернуть прежнюю версию PHP и обновить несовместимый компонент

Точные имена директив и параметров зависят от веб-сервера и хостинга, их лучше сверять с документацией: журналы в Apache и директива error_log в nginx.

Как найти причину по шагам

Идите по порядку и после каждого шага проверяйте, ушла ли ошибка.

  1. Убедитесь, что ошибка не разовая: обновите страницу, откройте другую страницу сайта, затем сам сайт с другого устройства или из другой сети. Если 500 видна не везде, запомните, на каких адресах.
  2. Вспомните, что менялось перед первой ошибкой: обновление CMS, плагина, темы, версии PHP, правка конфигурации, перенос сайта. Первым делом подозревайте последнее изменение.
  3. Откройте журнал ошибок. В панели хостинга он обычно называется «Логи» или «Журнал ошибок». На своём сервере это файл журнала веб-сервера, путь к которому задан в настройках.
  4. Найдите запись, совпадающую по времени с вашим обращением. Ищите строки с уровнем ошибки и названием файла: они указывают на проблемное место.
  5. Если записей нет, проверьте, включено ли логирование ошибок приложения. В CMS обычно есть режим отладки, который пишет подробности в отдельный файл. Включайте его на время диагностики и выключайте после: показывать ошибки посетителям нельзя, в них видны пути и внутреннее устройство сайта.
  6. Откатите последнее изменение: верните прежнюю версию файла, отключите свежий плагин, восстановите копию. Откат быстрее поиска причины, и сайт вернётся к посетителям раньше.
  7. Если причина не видна ни в логах, ни по недавним правкам, напишите в поддержку хостинга. Приложите адрес, время ошибки и фрагмент журнала, так ответят быстрее, чем на вопрос «не работает».

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

Что ошибка 500 делает с поиском

Поисковые системы тоже видят 500. По справке Google Search Central об HTTP-кодах и сетевых ошибках ошибки 5xx и 429 «prompt Google's crawlers to temporarily slow down with crawling», то есть робот временно обходит сайт реже. Если сервер упорно отдаёт ошибку, уже проиндексированные адреса сначала сохраняются, но со временем выпадают из индекса. Конкретных сроков в справке нет, поэтому рассчитывать на «подождём пару дней» не стоит.

Если сайт нужно отключить намеренно, например на время обновления, лучше отдавать код 503 с заголовком Retry-After: он сообщает, что остановка временная. Это описано в RFC 9110. Если страницы уже пропали из выдачи, посмотрите разбор почему сайт пропал из поиска Яндекса.

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

Как проверить сайт прямо сейчас

Быстрый способ понять, отдаёт ли сайт ошибку сейчас, — бесплатная проверка доступности: она показывает код ответа и время отклика, регистрация не нужна. Если код 5xx, переходите к логам по шагам выше. Если код 200, но посетители жалуются, ошибка плавающая или зависит от страницы: проверьте проблемные адреса отдельно.

Если ошибка может вернуться, полезно регулярное наблюдение за ответом сервера: тогда о 500 вы узнаете из уведомления, а не от клиента.

Проверить у себя

Бесплатно и без регистрации, по одному домену.

← Другие разборы в блоге