Быстрые ссылки

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

Ошибка 500 (Internal Server Error) означает одно: сервер получил запрос, начал его выполнять и упал. Он не говорит посетителю почему — это сделано специально, чтобы не показывать внутренности сайта. Но причина почти всегда записана в логе. Ниже — порядок, в котором я ищу её на чужих сайтах, и типичные решения для WordPress, OpenCart и Битрикса.

Сначала — что не является ошибкой 500

  • 502 Bad Gateway — веб-сервер (nginx) не дождался ответа от PHP. Обычно PHP-FPM упал или перегружен.
  • 503 Service Unavailable — сервер временно недоступен: режим обслуживания, превышен лимит процессов, хостинг ограничил сайт.
  • 504 Gateway Timeout — PHP не успел ответить за отведённое время: тяжёлый запрос, зависший внешний API.
  • «Ошибка установки соединения с базой данных» — это сообщение самой CMS, а не код 500, хотя иногда отдаётся с ним.

Если вы видите именно 500 — читаем дальше.

Шаг 1. Определите, когда началось

Девять из десяти ошибок 500 появляются сразу после какого-то действия:

  • обновили CMS, тему, плагин или модуль;
  • установили новый модуль;
  • хостинг сменил версию PHP (часто без предупреждения);
  • правили .htaccess или файлы сайта;
  • закончилось место на диске или истёк тариф.

Если вы знаете, что меняли, — это уже половина диагностики. Откатите это изменение, и сайт, скорее всего, заработает.

Шаг 2. Найдите лог ошибок

Где лежит лог, зависит от хостинга:

  • в панели хостинга (cPanel, ISPmanager, Plesk) — раздел «Логи» или «Журналы», файл error_log;
  • на VPS с nginx — /var/log/nginx/error.log и лог PHP-FPM, например /var/log/php8.2-fpm.log;
  • в корне сайта иногда лежит файл error_log, который пишет сам PHP.

На своём сервере смотреть удобнее так:

tail -n 50 /var/log/nginx/error.log
grep -i "fatal" /var/log/php*-fpm.log | tail -n 20

Ищите строки с PHP Fatal error. Типичный пример:

PHP Fatal error: Uncaught Error: Call to undefined function create_function() in /wp-content/plugins/old-slider/slider.php:112

Здесь всё сказано: старый плагин использует функцию, которую удалили в PHP 8. Решение — обновить или отключить плагин.

Шаг 3. Типичные причины и решения

Несовместимость с версией PHP

Самая частая причина в 2024–2026 годах: хостинг переводит сайты на PHP 8.x, а старые плагины, модули и темы написаны под PHP 5.6–7.4. Признаки в логе: undefined function, deprecated, must be of type, Unsupported operand types.

Что делать: временно вернуть предыдущую версию PHP в панели хостинга, чтобы сайт заработал, и спокойно обновить или заменить несовместимые компоненты.

Закончилась память

В логе: Allowed memory size of 134217728 bytes exhausted. PHP-скрипту не хватило памяти. Иногда достаточно поднять лимит, но если память кончается на обычной странице, где-то утечка — тяжёлый модуль, бесконечный цикл, огромная выборка из базы.

Поднять лимит можно в php.ini или в панели хостинга:

memory_limit = 256M

Ошибка в .htaccess

Если сайт работает на Apache, одна неправильная директива в .htaccess даёт 500 на всех страницах. В логе Apache будет Invalid command или RewriteRule: bad flag. Проверка простая: переименуйте .htaccess в .htaccess_old. Если сайт открылся (пусть и без красивых адресов), проблема в нём.

Права на файлы

После переноса или распаковки архива файлы могут оказаться с правами 777 или принадлежать не тому пользователю. Многие хостинги в этом случае отказываются выполнять PHP. Нормальные права: 644 для файлов, 755 для папок.

find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

Закончилось место на диске

Сессии, кэш и логи не могут записаться — сайт падает. Проверьте место в панели хостинга или командой df -h. Частые виновники: папка кэша Битрикса, логи модулей OpenCart, резервные копии, которые плагин складывает прямо на хостинг.

Ошибка 500 в WordPress

  1. Включите запись ошибок в лог. В wp-config.php перед строкой «That’s all, stop editing!»:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Ошибки будут писаться в /wp-content/debug.log, а посетители их не увидят.

  1. Отключите плагины без доступа к админке: переименуйте папку /wp-content/plugins в plugins_off. Если сайт заработал, верните имя и отключайте плагины по одному, переименовывая их папки.
  1. Проверьте тему: переименуйте папку активной темы — WordPress переключится на стандартную, если она установлена.
  1. Если ничего не помогло, сравните ядро с оригиналом: скачайте ту же версию WordPress и замените папки wp-admin и wp-includes. Папку wp-content и wp-config.php не трогайте.

Подробнее о похожей ситуации — в статье «Белый экран и критическая ошибка WordPress».

Ошибка 500 в OpenCart и ocStore

  1. Включите вывод ошибок в лог в настройках магазина: Система — Настройки — вкладка «Сервер» — «Записывать ошибки». Лог смотрите в Система — Обслуживание — Журнал ошибок, или в файле storage/logs/error.log (OpenCart 3) / system/storage/logs/error.log.
  1. Если ошибка появилась после установки модуля — зайдите в Модули — Модификаторы, отключите последний установленный модификатор и нажмите «Обновить». Затем очистите кэш шаблонов на главной странице админки (кнопка с шестерёнкой).
  1. Если не открывается и админка, удалите содержимое папки storage/modification — это сбросит все применённые модификаторы, магазин заработает в «чистом» виде. Потом обновите модификаторы из админки.
  1. Частая причина на OpenCart 2.x — PHP 8. Ядро OpenCart 2 на нём не работает, нужно оставаться на PHP 7.x или обновлять магазин.

Об установке модулей без поломок — в статье «Модули OpenCart».

Ошибка 500 в 1С-Битрикс

  1. Включите отладку в /bitrix/.settings.php:
'exception_handling' => array(
  'value' => array(
    'debug' => true,
    'handled_errors_types' => 4437,
    'exception_errors_types' => 4437,
    'ignore_silence' => false,
    'assertion_throws_exception' => true,
    'assertion_error_type' => 256,
    'log' => array('settings' => array('file' => 'bitrix/modules/error.log', 'log_size' => 1000000)),
  ),
  'readonly' => false,
),

После диагностики верните ‘debug’ => false.

  1. Проверьте /local/php_interface/init.php и /bitrix/php_interface/init.php — ошибка в обработчике события роняет весь сайт.
  1. Если ошибка после обновления — смотрите, какой модуль обновлялся, и откатите сайт из резервной копии, сделанной перед обновлением. Как обновлять безопасно — в статье «Как обновить 1С-Битрикс».
  1. Проверьте место на диске: папки /bitrix/cache и /bitrix/managed_cache на крупных сайтах разрастаются до десятков гигабайт.

Чего не делать

  • Не отключайте вывод ошибок, чтобы «убрать» 500. Ошибка никуда не денется.
  • Не переустанавливайте CMS поверх рабочей базы без копии.
  • Не удаляйте плагины через базу данных, если не уверены, что делаете.
  • Не меняйте сразу пять вещей. Меняйте по одной и проверяйте.

Когда звать разработчика

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

Ошибка 500 только на части страниц

Если главная открывается, а ошибка появляется на конкретной странице, круг поиска сужается сразу:

  • только в корзине или оформлении заказа — модуль оплаты или доставки, который обращается к внешнему API и падает при его недоступности;
  • только в админке — плагин или модуль, подключающий код лишь в панели управления;
  • только при отправке формы — обработчик формы или антиспам-модуль;
  • только на больших категориях — не хватает памяти или времени выполнения на тяжёлой выборке;
  • только у авторизованных пользователей — код, завязанный на сессию или роль пользователя.

Откройте проблемную страницу и сразу посмотрите последние строки лога: ошибка будет с текущим временем.

Ошибка 500 появляется периодически

Плавающая ошибка — самая неприятная. Типичные причины:

  1. Лимит процессов на хостинге. При всплеске посещаемости или атаке ботов новые запросы получают 500 или 503. В логе ошибок PHP пусто, зато в панели хостинга видны превышения.
  2. Cron-задачи. Тяжёлый обмен с 1С или генерация карты сайта по расписанию съедает ресурсы, и в это время сайт падает. Сопоставьте время ошибок с расписанием.
  3. Внешний API. Модуль курсов валют, доставки или отзывов ждёт ответа чужого сервера и падает по таймауту.
  4. Блокировки в базе. Длинный запрос блокирует таблицу, остальные ждут и отваливаются.

Для диагностики полезно собрать статистику: сколько ответов 500 и в какие часы.

awk '$9 == 500 {print substr($4, 2, 14)}' access.log | sort | uniq -c

Команда выводит количество ошибок 500 по часам из лога доступа nginx или Apache.

Чек-лист перед тем, как писать в поддержку хостинга

  • Время появления ошибки и что менялось перед этим.
  • Текст ошибки из лога, если удалось его найти.
  • Версия PHP, на которой работает сайт.
  • Адрес страницы, где воспроизводится ошибка.
  • Свободное место на диске и не превышены ли лимиты тарифа.

С таким описанием поддержка хостинга отвечает по делу, а не просит «очистить кэш браузера».

Как сделать, чтобы ошибка 500 не застала врасплох

  • Настройте мониторинг доступности: бесплатные сервисы раз в минуту открывают сайт и присылают уведомление в Telegram или на почту, если он ответил ошибкой.
  • Держите резервные копии вне хостинга и проверяйте, что они восстанавливаются.
  • Обновляйте плагины и модули на копии сайта, а не сразу на рабочем.
  • Перед сменой версии PHP проверяйте сайт на копии с новой версией.
  • Удалите неиспользуемые модули и плагины: меньше кода — меньше поводов для ошибки.

Частые вопросы

Может ли ошибка 500 быть из-за браузера посетителя?

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

Как долго сайт может отдавать 500 без последствий для поиска?

Несколько часов обычно проходят без следа. Если ошибка держится сутками, роботы начинают исключать страницы из индекса, и после исправления они возвращаются не сразу.

Нужна помощь?

Если не хочется разбираться самому или не получилось — напишите мне. Посмотрю сайт и скажу, что сломалось и сколько стоит исправить.

Ремонт сайтаНаписать в TelegramНаписать в Viber

Leave a comment