Ошибка 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
- Включите запись ошибок в лог. В 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, а посетители их не увидят.
- Отключите плагины без доступа к админке: переименуйте папку /wp-content/plugins в plugins_off. Если сайт заработал, верните имя и отключайте плагины по одному, переименовывая их папки.
- Проверьте тему: переименуйте папку активной темы — WordPress переключится на стандартную, если она установлена.
- Если ничего не помогло, сравните ядро с оригиналом: скачайте ту же версию WordPress и замените папки wp-admin и wp-includes. Папку wp-content и wp-config.php не трогайте.
Подробнее о похожей ситуации — в статье «Белый экран и критическая ошибка WordPress».
Ошибка 500 в OpenCart и ocStore
- Включите вывод ошибок в лог в настройках магазина: Система — Настройки — вкладка «Сервер» — «Записывать ошибки». Лог смотрите в Система — Обслуживание — Журнал ошибок, или в файле storage/logs/error.log (OpenCart 3) / system/storage/logs/error.log.
- Если ошибка появилась после установки модуля — зайдите в Модули — Модификаторы, отключите последний установленный модификатор и нажмите «Обновить». Затем очистите кэш шаблонов на главной странице админки (кнопка с шестерёнкой).
- Если не открывается и админка, удалите содержимое папки storage/modification — это сбросит все применённые модификаторы, магазин заработает в «чистом» виде. Потом обновите модификаторы из админки.
- Частая причина на OpenCart 2.x — PHP 8. Ядро OpenCart 2 на нём не работает, нужно оставаться на PHP 7.x или обновлять магазин.
Об установке модулей без поломок — в статье «Модули OpenCart».
Ошибка 500 в 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.
- Проверьте /local/php_interface/init.php и /bitrix/php_interface/init.php — ошибка в обработчике события роняет весь сайт.
- Если ошибка после обновления — смотрите, какой модуль обновлялся, и откатите сайт из резервной копии, сделанной перед обновлением. Как обновлять безопасно — в статье «Как обновить 1С-Битрикс».
- Проверьте место на диске: папки /bitrix/cache и /bitrix/managed_cache на крупных сайтах разрастаются до десятков гигабайт.
Чего не делать
- Не отключайте вывод ошибок, чтобы «убрать» 500. Ошибка никуда не денется.
- Не переустанавливайте CMS поверх рабочей базы без копии.
- Не удаляйте плагины через базу данных, если не уверены, что делаете.
- Не меняйте сразу пять вещей. Меняйте по одной и проверяйте.
Когда звать разработчика
Если в логе ошибка в файле ядра, повреждена база данных, или вы не нашли лог вообще — дальше лучше не экспериментировать на рабочем сайте. Я чиню такие поломки в рамках услуги «Ремонт сайта»: делаю копию текущего состояния, нахожу причину по логам и исправляю её.
Ошибка 500 только на части страниц
Если главная открывается, а ошибка появляется на конкретной странице, круг поиска сужается сразу:
- только в корзине или оформлении заказа — модуль оплаты или доставки, который обращается к внешнему API и падает при его недоступности;
- только в админке — плагин или модуль, подключающий код лишь в панели управления;
- только при отправке формы — обработчик формы или антиспам-модуль;
- только на больших категориях — не хватает памяти или времени выполнения на тяжёлой выборке;
- только у авторизованных пользователей — код, завязанный на сессию или роль пользователя.
Откройте проблемную страницу и сразу посмотрите последние строки лога: ошибка будет с текущим временем.
Ошибка 500 появляется периодически
Плавающая ошибка — самая неприятная. Типичные причины:
- Лимит процессов на хостинге. При всплеске посещаемости или атаке ботов новые запросы получают 500 или 503. В логе ошибок PHP пусто, зато в панели хостинга видны превышения.
- Cron-задачи. Тяжёлый обмен с 1С или генерация карты сайта по расписанию съедает ресурсы, и в это время сайт падает. Сопоставьте время ошибок с расписанием.
- Внешний API. Модуль курсов валют, доставки или отзывов ждёт ответа чужого сервера и падает по таймауту.
- Блокировки в базе. Длинный запрос блокирует таблицу, остальные ждут и отваливаются.
Для диагностики полезно собрать статистику: сколько ответов 500 и в какие часы.
awk '$9 == 500 {print substr($4, 2, 14)}' access.log | sort | uniq -c
Команда выводит количество ошибок 500 по часам из лога доступа nginx или Apache.
Чек-лист перед тем, как писать в поддержку хостинга
- Время появления ошибки и что менялось перед этим.
- Текст ошибки из лога, если удалось его найти.
- Версия PHP, на которой работает сайт.
- Адрес страницы, где воспроизводится ошибка.
- Свободное место на диске и не превышены ли лимиты тарифа.
С таким описанием поддержка хостинга отвечает по делу, а не просит «очистить кэш браузера».
Как сделать, чтобы ошибка 500 не застала врасплох
- Настройте мониторинг доступности: бесплатные сервисы раз в минуту открывают сайт и присылают уведомление в Telegram или на почту, если он ответил ошибкой.
- Держите резервные копии вне хостинга и проверяйте, что они восстанавливаются.
- Обновляйте плагины и модули на копии сайта, а не сразу на рабочем.
- Перед сменой версии PHP проверяйте сайт на копии с новой версией.
- Удалите неиспользуемые модули и плагины: меньше кода — меньше поводов для ошибки.
Частые вопросы
Может ли ошибка 500 быть из-за браузера посетителя?
Нет. Код 500 формирует сервер. Очистка кэша браузера помогает только если вы видите старую закэшированную страницу ошибки, а сайт уже исправлен.
Как долго сайт может отдавать 500 без последствий для поиска?
Несколько часов обычно проходят без следа. Если ошибка держится сутками, роботы начинают исключать страницы из индекса, и после исправления они возвращаются не сразу.
Нужна помощь?
Если не хочется разбираться самому или не получилось — напишите мне. Посмотрю сайт и скажу, что сломалось и сколько стоит исправить.
