Ошибка 500 Internal Server Error — одна из самых распространённых ошибок веб-серверов.
Она означает, что сервер получил запрос от пользователя, но во время обработки произошла внутренняя ошибка, из-за которой он не смог корректно выполнить действие.
В отличие от ошибок 404 или 403, проблема при ошибке 500 обычно находится не на стороне посетителя, а внутри сервера, сайта или приложения.
Ошибка может появиться при открытии главной страницы сайта, при входе в административную панель, отправке формы, загрузке файлов или выполнении любого другого действия.
Как выглядит ошибка 500
В зависимости от используемого веб-сервера сообщение может выглядеть по-разному:
500 Internal Server Error
или:
HTTP 500 Internal Server Error
Также могут встречаться варианты:
500 Error
The server encountered an internal error and was unable to complete your request
Internal Server Error
Текст ошибки зависит от настроек Apache, Nginx, PHP, CMS или приложения.
Основные причины ошибки 500
Ошибка 500 не указывает на конкретную проблему. Это общий ответ сервера, поэтому необходимо проверить несколько возможных причин.
Наиболее часто ошибка появляется из-за:
-
неправильных настроек
.htaccess; -
ошибок PHP-кода;
-
несовместимости версии PHP;
-
превышения лимитов памяти;
-
проблем с правами доступа к файлам;
-
ошибок CMS или плагинов;
-
повреждённых файлов сайта;
-
проблем с базой данных;
-
некорректной настройки веб-сервера;
-
нехватки ресурсов сервера;
-
ошибок после обновления сайта.
Проверьте логи сервера
Первое, что нужно сделать при появлении ошибки 500 — посмотреть логи.
Именно в логах обычно находится настоящая причина проблемы.
Apache
Для Apache часто используются следующие файлы:
/var/log/apache2/error.log
или:
/var/log/httpd/error_log
Посмотреть последние ошибки можно командой:
tail -n 100 /var/log/apache2/error.log
Пример ошибки:
PHP Fatal error: Allowed memory size exhausted
Это означает, что PHP превысил доступный лимит памяти.
Nginx
Для Nginx основной файл ошибок:
/var/log/nginx/error.log
Проверить последние записи:
tail -n 100 /var/log/nginx/error.log
PHP-FPM
Если используется PHP-FPM, ошибки могут находиться в отдельном журнале:
/var/log/php8.2-fpm.log
или:
/var/log/php-fpm/error.log
Путь зависит от версии PHP и операционной системы.
Проверьте файл .htaccess
Одна из самых частых причин ошибки 500 на Apache — неправильный файл .htaccess.
Например, ошибка может появиться после:
-
установки нового плагина;
-
изменения настроек CMS;
-
переноса сайта;
-
ручного редактирования правил Rewrite.
Для проверки временно переименуйте файл:
mv .htaccess .htaccess_backup
После этого обновите страницу сайта.
Если ошибка исчезла — проблема находится в .htaccess.
После проверки можно восстановить файл и исправить неправильное правило.
Проверьте синтаксис .htaccess
Некоторые директивы работают только на определённых версиях Apache.
Например, правило:
php_value memory_limit 256M
может вызвать ошибку 500, если сервер использует PHP-FPM.
В таком случае настройку необходимо выполнять через:
-
панель управления хостингом;
-
файл
php.ini; -
настройки PHP-FPM.
Проверьте права доступа к файлам
Неправильные права доступа могут привести к ошибке 500.
Обычно рекомендуемые значения:
Для директорий:
755
Для файлов:
644
Проверить права можно:
ls -la
Например:
-rw-r--r-- 644 index.php
drwxr-xr-x 755 wp-content
Не рекомендуется устанавливать права:
777
Это может создать проблемы с безопасностью.
Проверьте владельца файлов
После переноса сайта или распаковки архива файлы иногда получают неправильного владельца.
Например, сайт работает от пользователя:
www-data
а файлы принадлежат:
root
Проверить владельца:
ls -la
Исправить владельца можно:
chown -R www-data:www-data /var/www/site
Перед выполнением команды убедитесь, что используется правильный пользователь веб-сервера.
Проверьте версию PHP
После обновления PHP сайт может перестать работать.
Например:
-
сайт создан под PHP 7.4;
-
сервер обновили до PHP 8.3;
-
старый код больше не поддерживается.
Проверить текущую версию PHP:
php -v
Если используется панель управления, версию PHP можно посмотреть в настройках сайта.
Попробуйте временно переключить PHP на предыдущую стабильную версию и проверить работу сайта.
Проверьте лимит памяти PHP
Ошибка 500 часто возникает, когда PHP заканчивается доступная память.
Пример ошибки в логах:
Allowed memory size exhausted
Проверить текущий лимит:
php -i | grep memory_limit
Увеличить лимит можно в php.ini:
memory_limit = 256M
Также настройка может выполняться через:
-
.user.ini; -
настройки панели управления;
-
конфигурацию PHP-FPM.
После изменения необходимо перезапустить PHP-FPM или веб-сервер.
Например:
systemctl restart php8.2-fpm
Проверьте ошибки CMS
Если ошибка появилась на WordPress, Joomla, Drupal или другой CMS, проблема часто связана с расширениями.
Наиболее частые причины:
-
новый плагин;
-
обновление темы;
-
конфликт расширений;
-
устаревший код.
Для WordPress можно временно отключить плагины.
Например, через SSH:
mv wp-content/plugins wp-content/plugins_backup
Если сайт заработал — проблема находится в одном из плагинов.
После проверки верните папку обратно:
mv wp-content/plugins_backup wp-content/plugins
Включите режим отладки
При разработке или поиске проблемы полезно включить отображение ошибок.
Например, в WordPress:
Файл:
wp-config.php
Добавьте:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
После этого ошибки будут записываться в:
wp-content/debug.log
Не рекомендуется оставлять отображение ошибок включённым на рабочем сайте.
Посетители могут увидеть техническую информацию, которая может помочь злоумышленникам.
Проверьте базу данных
Иногда ошибка 500 появляется из-за проблем с базой данных.
Проверьте:
-
доступность MySQL/MariaDB;
-
правильность данных подключения;
-
состояние таблиц;
-
наличие повреждений.
Проверить статус базы данных:
systemctl status mariadb
или:
systemctl status mysql
Для MySQL можно проверить таблицы:
CHECK TABLE table_name;
Проверьте свободное место на сервере
Если на сервере закончился диск, приложения могут перестать работать.
Проверить свободное место:
df -h
Пример:
Filesystem Size Used Avail
/dev/sda1 80G 80G 0
Если свободного места нет, необходимо:
-
удалить старые логи;
-
очистить временные файлы;
-
увеличить диск;
-
проверить большие файлы.
Также проверьте количество inode:
df -i
Иногда место есть, но закончились доступные inode.
Проверьте нагрузку сервера
Ошибка 500 может появиться из-за нехватки ресурсов.
Проверьте:
top
или:
htop
Обратите внимание на:
-
загрузку CPU;
-
использование RAM;
-
процессы PHP;
-
MySQL;
-
количество одновременно работающих запросов.
Если сервер перегружен, сайт может возвращать ошибки даже при правильной конфигурации.
Проверьте лимиты PHP-FPM
При высокой нагрузке PHP-FPM может достигнуть ограничения процессов.
В логах может появиться:
server reached pm.max_children setting
Проверить настройки можно в:
/etc/php/*/fpm/pool.d/www.conf
Основные параметры:
pm.max_children
pm.start_servers
pm.max_requests
Если сайт получает много запросов, необходимо правильно настроить PHP-FPM.
Проверьте настройки Nginx или Apache
Ошибка может быть связана с изменениями конфигурации веб-сервера.
Для Nginx проверить конфигурацию:
nginx -t
Для Apache:
apachectl configtest
Если есть ошибка, сервер покажет файл и строку с проблемой.
Проверьте изменения перед появлением ошибки
Если сайт работал нормально и внезапно появилась ошибка 500, вспомните последние изменения:
-
обновление CMS;
-
установка плагина;
-
изменение PHP;
-
изменение конфигурации сервера;
-
перенос сайта;
-
изменение DNS;
-
установка SSL.
Часто причина находится именно в последнем изменении.
Ошибка 500 после установки SSL
Иногда ошибка появляется после включения HTTPS.
Причины могут быть:
-
неправильный редирект HTTP → HTTPS;
-
ошибка в
.htaccess; -
конфликт плагинов SSL;
-
неправильная настройка виртуального хоста.
Проверьте конфигурацию веб-сервера и правила перенаправления.
Ошибка 500 после переноса сайта
После миграции сайта проверьте:
-
правильность настроек базы данных;
-
права файлов;
-
владельца файлов;
-
версию PHP;
-
наличие всех необходимых расширений PHP;
-
пути в конфигурационных файлах.
Например, WordPress может содержать старые данные подключения к базе:
define('DB_NAME', 'database');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
Проверьте, что эти данные соответствуют новой базе.
Быстрый алгоритм поиска ошибки 500
Если нужно быстро найти причину, выполните следующие шаги:
-
Посмотрите error log веб-сервера.
-
Проверьте последние изменения на сайте.
-
Проверьте
.htaccess. -
Проверьте версию PHP.
-
Проверьте лимит памяти PHP.
-
Проверьте права файлов.
-
Проверьте владельца файлов.
-
Проверьте плагины и расширения CMS.
-
Проверьте свободное место на сервере.
-
Проверьте нагрузку сервера.
В большинстве случаев причина находится именно в логах.
Как предотвратить появление ошибки 500
Чтобы снизить вероятность появления ошибки:
-
регулярно обновляйте CMS и плагины;
-
делайте резервные копии;
-
не устанавливайте неизвестные расширения;
-
следите за ресурсами сервера;
-
используйте актуальные версии PHP;
-
правильно настраивайте права доступа;
-
контролируйте логи ошибок;
-
используйте тестовый сервер перед обновлением сайта.