500 ошибка (Internal Server Error) — это внутренняя ошибка сервера, которая может быть вызвана самыми разными причинами.
Код 500 не указывает на конкретную проблему, поэтому для диагностики лучше начинать с логов — это может определить, что именно вызвало сбой. Подробнее о том, как включить логирование ошибок Apache — в статье «Получение логов».
Основные причины ошибки 500:
- Проблема с подключением к базе данных
- Ошибка в файле .htaccess
- Ошибка в скрипте сайта
- Превышение лимита памяти (memory_limit)
- Ограничения изоляции сайтов
Проблема с подключением к базе данных
Ошибка возникает, если сайт не может подключиться к базе данных. Чаще всего это связано с некорректными данными подключения: хост, имя пользователя, пароль или название базы данных указаны неправильно.
Проверьте конфигурационные файлы сайта и убедитесь, что реквизиты базы данных указаны верно.
Также причиной может быть сбой на сервере баз данных MySQL. Мы отслеживаем такие ситуации и быстро устраняем их — от пользователя действия не требуются.
Ошибка в файле .htaccess
Если в файле .htaccess есть ошибка, Apache не сможет его корректно обработать и вернет ошибку 500.
Пример строки из лога:
example.com [Thu Apr 10 17:10:28 2025] [alert] [pid 99315] config.c(2046): [client 5.24.158.122:0] /home/c/cb73619/test/public_html/.htaccess: command
Здесь проблема в неправильной директиве в файле /home/c/cb73619/test/public_html/.htaccess.
Для диагностики временно переименуйте файл .htaccess и откройте сайт. Если ошибка пропала, значит, проблема в его содержимом.
Можно попробовать точечно закомментировать отдельные строки (добавить символ # в начале строки) и посмотреть, заработает ли сайт, когда конкретные строки отключены.
Ошибка в скрипте сайта
Ошибки в коде сайта — одна из самых частых причин ошибки 500. Это может быть синтаксическая ошибка, отсутствие нужного класса или проблема с версией PHP.
Пример записи в логе:
example.com [Thu Apr 10 14:19:03 2025] [error] [pid 1013679] sapi_apache2.c(358): [client 5.24.158.122:0] PHP Fatal error: Uncaught Error: Class "FFI" not found in /home/c/ct81221/SiteName/public_html/seg.php:4
Из строки видно, что ошибка вызвана отсутствием класса FFI в файле seg.php.
Иногда может быть достаточно поискать в сети текст ошибки из лога — возможно, готовое решение уже есть на форумах или в документации CMS.
Одна из частых причин возникновения ошибки — неподходящая версия PHP. Проверьте требования CMS или скрипта и смените версию PHP через панель управления.
Если это не помогает, обратитесь к разработчику CMS, плагина или скрипта.
Превышение memory_limit
Ошибка возникает, если скрипт пытается использовать больше памяти, чем доступно по тарифу.
Пример лога:
example.com [Thu Apr 10 11:46:14 2025] [error] [pid 993433] sapi_apache2.c(358): [client 5.24.158.122:0] PHP Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 2516582432 bytes) in /home/c/ct81221/SiteName/public_html/memory.php on line 11
Если скрипту нужно до 2048 МБ памяти, поможет переход на тариф мощного хостинга. Если больше — лучше обратиться к разработчику CMS или расширения, чтобы выяснить, что вызывает такой расход.
Изоляция сайтов
Изоляция сайтов — это мера защиты от заражения, которая помещает каждый сайт в собственное автономное пространство.
При включенной изоляции сайт не имеет доступа к файлам за пределами своей директории, из-за чего может возникать ошибка 500.
Пример лога:
example.com [Thu Apr 10 11:46:15 2025] [error] [pid 2392431] sapi_apache2.c(349): [client 5.24.158.122:0] PHP Fatal error: Unknown: Failed opening required /home/c/ct81221/SiteName/public_html/index.php' (include_path='.:/opt/php74/share/pear') in Unknown on line 0
Для устранения проблемы проверьте все ссылки и пути в коде, чтобы они не указывали на файлы за пределами директории /ваш_сайт/public_html/. Все нужные файлы лучше разместить в директории сайта.
Вы также можете отключить изоляцию, но мы не рекомендуем этого делать — так возрастет риск заражения сайтов. Для полноценной защиты важно, чтобы изоляция была включена для всех сайтов на аккаунте.