HTTP 500 Internal Server Error — код статуса ответа из группы 5xx (ошибки сервера), означающий, что сервер столкнулся с непредвиденной ситуацией и не смог выполнить запрос. Это «мусорный» код: если сервер не знает, что именно пошло не так — он возвращает 500. Причина скрыта на стороне сервера и не передаётся клиенту.
Частые причины ошибки 500
- Синтаксическая ошибка в коде. Один сломанный PHP/Python/Node.js файл роняет весь сайт.
- Неверные права доступа. Файлы скриптов (PHP, CGI) должны быть chmod 644, директории — 755. Если 777 или нет прав на чтение — 500.
- Ошибка в .htaccess. Синтаксическая ошибка в директивах Apache вызывает 500 немедленно.
- Исчерпание памяти. PHP-скрипт превысил memory_limit (например, 128 МБ) — процесс завершён с ошибкой.
- Недоступная база данных. Если приложение не обрабатывает исключение подключения — падает с 500.
- Таймаут скрипта. PHP max_execution_time истёк — сервер обрывает выполнение.
- Повреждённый vendor/. Неполная установка зависимостей через composer или pip.
Как найти причину
Ключ к диагностике — логи ошибок, а не браузер (клиенту специально не показывают детали из соображений безопасности):
# Логи nginx:
tail -50 /var/log/nginx/error.log
# Логи PHP-FPM:
tail -50 /var/log/php8.1-fpm.log
# Логи Apache:
tail -50 /var/log/apache2/error.log
# Системный журнал:
journalctl -u php8.1-fpm --since "10 minutes ago"
На виртуальном хостинге логи доступны через cPanel или FTP в папке logs/. Временно включи display_errors = On в php.ini для разработки — но никогда на продакшене.
История
Код 500 определён в исходной спецификации HTTP/1.0 в RFC 1945 (1996) как базовый код для всех непредвиденных серверных ошибок. В HTTP/1.1 (RFC 2616, 1999) группа 5xx была расширена: 502 Bad Gateway (ошибка проксирования), 503 Service Unavailable (сервис перегружен), 504 Gateway Timeout. В HTTP/2 (RFC 7540, 2015) и HTTP/3 коды статуса сохранены без изменений.
Смежные коды 5xx
| Код | Название | Когда возникает |
|---|---|---|
| 500 | Internal Server Error | Непредвиденная ошибка на сервере |
| 502 | Bad Gateway | Прокси получил неверный ответ от бэкенда |
| 503 | Service Unavailable | Сервер перегружен или на обслуживании |
| 504 | Gateway Timeout | Бэкенд не ответил вовремя |
| 507 | Insufficient Storage | Нет места для сохранения данных |
500 ошибки в популярных CMS и фреймворках
WordPress 500 Internal Server Error: чаще всего — несовместимый плагин (деактивировать через FTP переименованием папки в wp-content/plugins/), превышение memory_limit PHP (увеличить в wp-config.php: define('WP_MEMORY_LIMIT', '256M')), ошибка в functions.php темы (переименовать тему в wp-content/themes/). Включить дебаггинг: define('WP_DEBUG', true); define('WP_DEBUG_LOG', true) — лог в wp-content/debug.log.
Laravel 500 ошибки: storage/logs/laravel.log — первое место для диагностики. Проблемы прав: chmod -R 775 storage bootstrap/cache && chown -R www-data storage. APP_DEBUG=true в .env временно показывает stack trace. Кэш конфигурации: php artisan config:clear && php artisan cache:clear решает многие необъяснимые 500. Django 500: settings.DEBUG=True + ALLOWED_HOSTS=['*'] для локальной диагностики.
На что обращать внимание
500-ошибка при деплое обычно означает синтаксическую ошибку или несовместимость версий. Первое действие — проверить лог PHP-FPM и nginx. Если 500 возникает периодически под нагрузкой — проверь OOM Killer (дмesг | grep oom) и лимиты памяти PHP. Настрой мониторинг с оповещением при росте числа 500-ошибок в nginx-логах — это ранний индикатор проблем.