Содержание10
Ошибка 500 значит, что сервер получил запрос, но сломался, пока готовил ответ. Виноват не посетитель и не адрес страницы, а код сайта, настройки сервера или нехватка ресурсов. Причину почти всегда показывает журнал ошибок сервера или PHP: начинать нужно с него, а не с перебора плагинов вслепую.
Что значит ошибка 500
Ошибка 500 Internal Server Error — внутренняя ошибка сервера. Спецификация HTTP (RFC 9110) определяет её так: сервер столкнулся с непредвиденным условием, которое помешало выполнить запрос. Соединение установлено, сервер жив и отвечает, но страницу собрать не смог.
Код 500 ничего не говорит о конкретной причине. MDN называет его общим ответом «на всё»: сервер отдаёт 500, когда не нашёл более подходящего кода из группы 5xx. Поэтому одинаковый белый экран с надписью Internal Server Error может скрывать опечатку в PHP, закончившуюся память или запрет на чтение файла.
Для посетителя это тупик: ни страницы, ни формы заявки. Для владельца — сигнал, что поломка на стороне сервера и чинить её придётся тому, у кого есть доступ к хостингу и коду. Обновление страницы иногда помогает, если сбой разовый, но постоянную 500 перезагрузкой не вылечить.
Ошибка 500 — сервер ответил, но не смог собрать страницу. Причина живёт в коде или настройках сервера, а не в адресе.
Чем 500 отличается от 502, 503 и 504?
Все четыре кода из группы 5xx значат, что проблема на стороне сервера. Но место поломки у них разное, и от него зависит, куда смотреть в первую очередь.
| Код | Что произошло | Куда смотреть |
|---|---|---|
| 500 Internal Server Error | Сервер или приложение упали при обработке запроса | Журнал ошибок сервера и PHP, последние изменения в коде |
| 502 Bad Gateway | Прокси, например nginx, получил некорректный ответ от следующего сервера в цепочке | Жив ли PHP-FPM или бэкенд за прокси |
| 503 Service Unavailable | Сервер временно перегружен или закрыт на обслуживание | Нагрузка, лимиты тарифа, режим техработ |
| 504 Gateway Timeout | Прокси не дождался ответа от вышестоящего сервера | Медленные запросы к базе, таймауты прокси |
На практике коды путают из-за заглушки: многие хостинги показывают для всех ошибок одну страницу «Что-то пошло не так». Настоящий код виден только в заголовке ответа — в инструментах разработчика браузера или в выводе curl.
Разница важна для поиска. Код 503 честно говорит роботу «зайди позже», а 500 сообщает о поломке. Если сайт закрыт на техработы, отдавать нужно 503, а не 500.
Почему сервер отдаёт ошибку 500: частые причины
Почти каждая 500 сводится к одному из пяти случаев. MDN перечисляет основные: неверная настройка сервера, нехватка памяти, необработанные исключения в коде и неправильные права на файлы.
- 01 Ошибка в коде
Фатальная ошибка PHP после правки шаблона, обновления плагина или модуля CMS. Самая частая причина, особенно если 500 появилась сразу после изменений.
- 02 Неверная директива в .htaccess
Если в файле .htaccess есть ошибка, Apache не может его обработать и возвращает 500. Справка хостинга Timeweb для проверки советует временно переименовать .htaccess: пропала ошибка — виновато его содержимое.
- 03 Закончилась память
Скрипт упёрся в memory_limit, предельный объём памяти, который PHP выделяет одному скрипту. Типичный случай — импорт каталога, генерация большого отчёта, тяжёлый плагин.
- 04 Права на файлы и папки
После переноса или распаковки архива сервер не может прочитать скрипт или записать кэш.
- 05 Несовместимые версии
Хостинг обновил PHP, а старый модуль CMS на новой версии падает.
Реже виновата база данных: часть CMS при недоступной базе выводит своё сообщение, часть отдаёт голую 500. Ещё одна причина — взлом с подменой файлов. Если 500 появилась без всяких изменений с вашей стороны, проверьте целостность файлов и безопасность сайта.
Мнение. Если ошибка 500 появилась сразу после обновления плагина, темы или модуля, начните с отката этого изменения: так сайт вернётся быстрее, чем при разборе кода на живом сервере.
Где смотреть логи сервера и PHP?
Журнал ошибок — главный инструмент при 500. Сам код не указывает на конкретную причину, поэтому диагностику лучше начинать с логов: так советует справка хостинга Timeweb. В справочнике кодов Яндекс Вебмастера совет тот же: проверьте логи сервера, чтобы найти причину ошибки.
Где лежат журналы, зависит от хостинга:
Для WordPress запись в журнал включают в wp-config.php так, чтобы ошибки не выводились на экран:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Выводить ошибки на экран рабочего сайта нельзя. Документация PHP прямо говорит, что в системах с доступом к интернету вывод ошибок включать нельзя: в тексте ошибки видны пути к файлам и детали кода, которыми воспользуется взломщик.
Ответ на вопрос «почему 500» почти всегда уже записан в журнале ошибок. Ищите строку с тем же временем, что и сбой.
Как найти причину ошибки 500 по шагам
Искать причину лучше по порядку: от простой проверки к правке кода. Так вы не потратите час на плагины, когда виноват тариф.
- 01 Снимите код ответа
Откройте страницу в инструментах разработчика или выполните
curl -I https://site.ru/catalog/. Убедитесь, что это именно 500, а не 502 или 503. - 02 Определите масштаб
Падает весь сайт, один раздел или одна страница? Ошибка на одной странице указывает на её шаблон или модуль, на всём сайте — на общие настройки, .htaccess или PHP.
- 03 Вспомните последние изменения
Обновление CMS, новый плагин, правка .htaccess, смена версии PHP, перенос на другой сервер.
- 04 Найдите запись в журнале
Откройте журнал ошибок за время сбоя: там будет файл, строка и текст ошибки.
- 05 Откатите изменение
Отключите плагин, верните прежний .htaccess или версию PHP. Временное переименование .htaccess быстро показывает, виноват ли он.
- 06 Проверьте ресурсы и права
Если в журнале сообщение о памяти, поднимите memory_limit в пределах тарифа или найдите тяжёлый скрипт. Если о доступе — исправьте права на файлы.
- 07 Проверьте результат
Снова снимите код ответа: должно быть 200, а журнал за последние минуты — пустым по этой ошибке.
Где ошибаются чаще всего: правят файлы прямо на рабочем сайте без копии, включают вывод ошибок на экран и забывают выключить, лечат симптом очисткой кэша. Без резервной копии откат превращается в восстановление по памяти.
Как ошибка 500 влияет на поиск?
Разовая 500 на пару минут позиции не обрушит. Опасна ошибка, которая держится долго или повторяется на многих адресах.
Google описывает свою реакцию так. При ошибке 500 робот снижает частоту сканирования, и снижение пропорционально числу адресов, которые отдают ошибку сервера. Адреса, которые постоянно возвращают такую ошибку, удаляются из индекса. Когда сервер снова начинает отвечать кодом 2xx, Google постепенно возвращает прежнюю частоту сканирования.
Яндекс подходит строже на уровне отдельной страницы: в справке Вебмастера сказано, что страница с кодом ответа, отличным от 200 OK, недоступна для роботов и посетителей и не может попасть в поиск. Если робот пришёл в момент сбоя, страница рискует выпасть до следующего обхода.
Факт. Google снижает частоту сканирования сайта пропорционально количеству адресов, которые отдают ошибку 500, а адреса с постоянной ошибкой удаляет из индекса.
После исправления отправьте важные страницы на переобход в Яндекс Вебмастере и проверьте их в Google Search Console. Как подключить и читать эти панели, разобрано в статье про Яндекс Вебмастер.
Своя страница для ошибки сервера
Стандартный экран Internal Server Error пугает посетителя и не даёт ему выхода. Свою страницу для ошибок 5xx делают простой: короткое объяснение, что проблема на стороне сайта, телефон или почта для срочной связи.
В nginx одну страницу для группы ошибок задаёт директива error_page — документация приводит именно такой пример:
error_page 500 502 503 504 /50x.html;
В Apache то же делает директива ErrorDocument: ErrorDocument 500 /errors/500.html.
Страница ошибки должна быть статичным HTML-файлом. Если она собирается той же CMS, что упала, она упадёт вместе с ней. И главное правило: код ответа остаётся 500. Красивая заглушка с кодом 200 скрывает поломку от поисковика и от вас самих: мониторинг будет считать сайт рабочим.
Как не допустить повторения ошибки 500
Ошибку 500 нельзя исключить совсем, но можно сделать так, чтобы она случалась редко и чинилась быстро.
- 01 Тестовая копия сайта
Обновления CMS и плагинов сначала проверяют на ней, а не на рабочем сайте.
- 02 Резервные копии
Файлы и база перед каждым обновлением, чтобы откат занимал минуты, а не вечер.
- 03 Журнал вместо экрана
Log_errors включён, вывод ошибок на экран выключен.
- 04 Мониторинг доступности
Внешняя проверка кода ответа главной и ключевых страниц, чтобы о 500 вы узнали раньше клиентов.
- 05 Запас ресурсов
Тариф хостинга с запасом по памяти и процессам для импорта и пиковых нагрузок.
Граница у этого списка честная: если сайт работает на устаревшей версии CMS, которую уже не обновить без переделки, профилактика лишь отсрочит следующую 500. Тогда дешевле переносить сайт на поддерживаемую версию, чем латать.
Если ошибка повторяется, а разбираться в журналах некому, подключите техподдержку сайта: найдём причину по журналам, вернём сайт и настроим проверки, чтобы следующий сбой не стал сюрпризом.
Источники
- RFC 9110: HTTP Semantics, 500 Internal Server Error — IETF
- 500 Internal Server Error — MDN
- Справочник по кодам статуса HTTP — Яндекс Вебмастер
- Как проверить, что сайт доступен для посетителей и поисковых роботов — Яндекс Вебмастер
- Как коды статуса HTTP влияют на сканирование — Google
- Ошибка 500 — справочный центр Timeweb
- Модуль ngx_http_core_module — nginx
- Настройка во время выполнения: обработка ошибок — PHP
- Описание основных директив php.ini — PHP
- Отладка в WordPress — WordPress