Что такое ошибка 500

Ошибка 500 (Internal Server Error) — это общий код ответа HTTP, который означает, что сервер столкнулся с непредвиденным условием и не может выполнить запрос. В отличие от ошибок 4xx, где проблема обычно в запросе клиента, 500-я серия указывает на сбой на стороне сервера. Пользователь видит стандартное сообщение без деталей, а точная причина фиксируется в логах. К распространённым причинам относятся:
- Синтаксические ошибки в коде приложения (PHP, Python, Node.js).
- Недостаточно прав на файлы или папки для веб-сервера.
- Превышение лимитов памяти или времени выполнения.
- Некорректная конфигурация веб-сервера (Apache, Nginx, IIS).
- Конфликты между плагинами, модулями или библиотеками.
- Проблемы с подключением к базе данных.
Пошаговая диагностика и исправление
Шаг 1: Найдите детали ошибки в логах сервера
Логи — ваш главный источник информации. Без них вы действуете вслепую.
- Определите веб-сервер. Распространённые пути к логам:
- Apache:
/var/log/apache2/error.log(Debian/Ubuntu) или/var/log/httpd/error_log(CentOS/RHEL). - Nginx:
/var/log/nginx/error.log. - IIS:
%SystemDrive%\inetpub\logs\LogFiles\W3SVC1. - На shared-хостинге логи часто доступны через панель управления (cPanel → «Metrics» → «Errors»).
- Apache:
- Найдите записи, соответствующие времени ошибки. Пример для PHP:
[04-Mar-2026 14:30:22] PHP Fatal error: Uncaught Error: Call to undefined function some_function() in /var/www/html/index.php:15 Stack trace: #0 {main} thrown in /var/www/html/index.php on line 15
Здесь видно: вindex.phpна строке 15 вызвана несуществующая функция. - Если логи пустые, включите детальное логирование:
- Для PHP в
php.ini:log_errors = On,error_log = /var/log/php_errors.log. - Для Apache:
LogLevel debugв конфигурации виртуального хоста. - Для Nginx:
error_log /var/log/nginx/error.log debug;.
- Для PHP в
💡 Совет: Если вы не знаете, где логи, создайте тестовый PHP-файл с
<?php phpinfo(); ?>и найдите разделerror_log. Или проверьте конфигурацию веб-сервера: для Apachegrep -r "ErrorLog" /etc/apache2/, для Nginxgrep -r "error_log" /etc/nginx/.
Шаг 2: Проверьте недавние изменения в коде или конфигурации
Ошибка 500 часто появляется после:
- Обновления CMS (WordPress, Joomla, Drupal).
- Установки нового плагина, модуля или темы.
- Редактирования
.htaccess,nginx.conf,web.config. - Внесения изменений в код приложения.
Что делать:
- Восстановите резервную копию, созданную до изменений. Если её нет:
- Вручную откатите изменения:
- Для WordPress: через FTP переименуйте папку плагина (
wp-content/plugins/имя-плагина→wp-content/plugins/имя-плагина.disabled). Если ошибка исчезнет, проблема в этом плагине. То же для темы (wp-content/themes). - Для конфигов: восстановите предыдущую версию из истории редактора или бэкапа.
- Для WordPress: через FTP переименуйте папку плагина (
- Проверьте, исчезла ли ошибка. Если да — ищите конкретную ошибку в откаченном коде (возврат к шагу 1).
Шаг 3: Убедитесь в правильности прав доступа
Неправильные права на файлы — частая причина 500, особенно после переноса сайта или смены хостинга.
Стандартные права:
- Файлы:
644(-rw-r--r--). - Папки:
755(drwxr-xr-x). - Владелец: пользователь веб-сервера (например,
www-dataдля Apache/Nginx на Debian/Ubuntu,apacheна CentOS).
Как применить на Linux:
cd /var/www/html # Перейдите в корень сайта
sudo chown -R www-data:www-data . # Замените www-data на вашего пользователя
sudo find . -type f -exec chmod 644 {} \;
sudo find . -type d -exec chmod 755 {} \;
Для Windows (IIS):
- Откройте свойства папки сайта → «Безопасность».
- Нажмите «Изменить» → «Добавить».
- Введите
IIS_IUSRS, нажмите «Проверить имена». - Установите права: «Чтение и выполнение», «Чтение».
- Убедитесь, что
IUSRтакже имеет права «Чтение».
Шаг 4: Проверьте и увеличьте лимиты ресурсов
Если в логах есть Allowed memory size of X bytes exhausted (PHP) или Maximum execution time of X seconds exceeded, нужно увеличить лимиты.
- Найдите
php.ini:php --ini | grep "Loaded Configuration File"
Или создайтеinfo.phpс<?php phpinfo(); ?>и откройте в браузере. - Измените параметры в
php.ini:memory_limit = 256M ; Было 128M или меньше max_execution_time = 60 ; Было 30 или меньше post_max_size = 32M ; Для загрузки файлов upload_max_filesize = 32M - Перезапустите веб-сервер:
sudo systemctl restart apache2 # Apache sudo systemctl restart nginx # Nginx sudo systemctl restart php-fpm # Если используется PHP-FPM - Если нет доступа к
php.ini(shared-хостинг):- Для Apache: добавьте в
.htaccessв корне сайта:php_value memory_limit 256M php_value max_execution_time 60 - Для некоторых хостеров: создайте
user.iniв корне сайта с теми же директивами.
- Для Apache: добавьте в
Шаг 5: Отключите плагины/модули для поиска конфликта
Если ошибка появилась после установки/обновления плагина в CMS.
WordPress:
- Через FTP переименуйте папку
/wp-content/pluginsвplugins.off. Это отключит все плагины. - Если ошибка исчезнет, переименуйте обратно и отключайте плагины по одному, переименовывая их папки (например,
akismet→akismet.off), пока ошибка не вернётся. - Проверьте совместимость плагина с вашей версией WordPress.
Joomla:
- Если есть доступ в админку, отключите все расширения через «Менеджер расширений».
- Если доступа нет, через FTP переименуйте папки в
/administrator/components/и/components/. - Проверьте логи Joomla в
/administrator/logs/.
Drupal:
- Если доступен Drush, выполните
drush pm-disable --all. - Иначе через FTP переименуйте папки модулей в
/modules/и/sites/all/modules/.
Шаг 6: Проверьте корректность конфигурационных файлов
Ошибки в конфигах веб-сервера — частая причина 500.
Apache (.htaccess и конфиги):
- Проверьте синтаксис
.htaccessв корне сайта. Удалите все строки и добавляйте по одной, проверяя ошибку. - Проверьте основной конфиг:
sudo apachectl configtest. ВыводSyntax OKозначает корректность. - Убедитесь, что нужные модули включены:
sudo a2enmod rewrite(если используются ЧПУ).
Nginx (nginx.conf и файлы в sites-enabled):
- Проверьте синтаксис:
sudo nginx -t. - Убедитесь, что в
location-блоках нет опечаток, аproxy_pass(если есть) указывает на правильный адрес (например,http://127.0.0.1:8000). - Проверьте права на файлы, указанные в
rootилиalias.
PHP (php.ini):
- Откройте
php.iniи проверьте на синтаксические ошибки (пропущенные кавычки, точки с запятой). - Убедитесь, что необходимые расширения включены (например,
extension=mysqli,extension=gd). - Проверьте, что
display_errors = Offна продакшене (ноlog_errors = On).
Ошибки в .htaccess (Apache) или nginx.conf (Nginx) вызывают 500.

Синтаксическая ошибка в конфигурационном файле .htaccess приводит к Internal Server Error
Apache (.htaccess и конфиги):
- Проверьте синтаксис
.htaccessв корне сайта. Удалите все строки и добавляйте по одной, проверяя ошибку. - Проверьте основной конфиг:
sudo apachectl configtest. ВыводSyntax OKозначает корректность. - Убедитесь, что нужные модули включены:
sudo a2enmod rewrite(если используются ЧПУ).
Nginx (nginx.conf и файлы в sites-enabled):
- Проверьте синтаксис:
sudo nginx -t. - Убедитесь, что в
location-блоках нет опечаток, аproxy_pass(если есть) указывает на правильный адрес (например,http://127.0.0.1:8000). - Проверьте права на файлы, указанные в
rootилиalias.
PHP (php.ini):
- Откройте
php.iniи проверьте на синтаксические ошибки (пропущенные кавычки, точки с запятой). - Убедитесь, что необходимые расширения включены (например,
extension=mysqli,extension=gd). - Проверьте, что
display_errors = Offна продакшене (ноlog_errors = On).
Профилактика ошибки 500
- Регулярно проверяйте логи сервера (раз в неделю или после каждого обновления). Настройте мониторинг через Logwatch, Papertrail или аналоги.
- Тестируйте все изменения на staging-окружении перед продакшеном.
- Используйте систему контроля версий (Git) для быстрого отката.
- Следите за лимитами ресурсов: мониторьте потребление памяти (
memory_get_usage()в PHP) и времени выполнения. - Обновляйте ПО постепенно: ядро CMS, плагины, библиотеки — по одному, и только с официальных источников.
- Настройте кастомную страницу ошибок (например,
ErrorDocument 500 /500.htmlв Apache), чтобы пользователи видели дружелюбный интерфейс, но не отключайте логирование.