Ошибка 500 Internal Server Error: что значит и как починить
Ошибка 500 Internal Server Error — серверная (класс 5xx), которая говорит «что-то сломалось, но я не могу объяснить что». Это generic-код: сервер знает о проблеме, но не раскрывает детали клиенту из соображений безопасности. Для администратора 500 — красный флаг, требующий немедленного расследования через логи.
Разберём, что именно означает 500, какие 8 типовых причин её вызывают, как быстро найти первопричину в логах PHP, nginx, Apache и Node.js, и как починить для WordPress, Laravel, Symfony и Express.
Что означает HTTP 500
По RFC 9110 §15.6.1, код 500 указывает, что сервер столкнулся с непредвиденной ситуацией, которая помешала ему выполнить запрос. В отличие от 502 (bad gateway) или 503 (service unavailable), 500 обычно означает исключение в прикладном коде или проблему с интерпретатором.
8 частых причин 500 ошибки
- Фатальная ошибка в PHP/Python/Node.js — unhandled exception, синтаксическая ошибка, out of memory.
- Неправильные права на файлы (.htaccess, скрипты) — chmod 644 для файлов, 755 для директорий.
- Ошибка подключения к базе данных — неправильные credentials, MySQL упал, max_connections исчерпан.
- Превышен memory_limit в PHP (
php.ini) или heap size в Node.js. - Бесконечный цикл или рекурсия — скрипт завис, превышен
max_execution_time. - Сломанная директива в .htaccess или nginx config — опечатка в модуле, отсутствующий модуль.
- Отсутствующая зависимость — не установлен composer-пакет, npm-модуль, Python library.
- Проблема с кэшем framework — устаревший Laravel config cache, Symfony
var/cache.
Где искать логи
Первый шаг при 500 — прочитать логи. Никогда не гадайте, всегда смотрите stack trace.
# PHP-FPM error log
tail -100 /var/log/php-fpm/error.log
tail -100 /var/log/php8.4-fpm.log
# nginx
tail -100 /var/log/nginx/error.log
# Apache
tail -100 /var/log/apache2/error.log
# Laravel
tail -100 storage/logs/laravel.log
# Node.js (pm2)
pm2 logs --lines 100Для быстрой диагностики снаружи используйте HTTP Header Checker и Security Scanner от Enterno.io — они покажут, как отвечает сервер и утекает ли информация через заголовки.
Решения для популярных платформ
WordPress
- Переименуйте plugins/ → определите, какой плагин сломался.
- Увеличьте memory_limit в
wp-config.php:define('WP_MEMORY_LIMIT', '256M'); - Включите debug:
define('WP_DEBUG', true);+define('WP_DEBUG_LOG', true); - Проверьте .htaccess — переименуйте и зайдите в Настройки → Постоянные ссылки для регенерации.
Laravel
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cacheNode.js / Express
// Global error handler
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
ok: false,
error: process.env.NODE_ENV === 'production' ? 'Internal Server Error' : err.message
});
});nginx + PHP-FPM
fastcgi_read_timeout 60s;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
# increase in case of FastCGI timeout / buffer overflowБезопасность: не раскрывайте stack trace в production
Никогда не показывайте полный stack trace в production — это OWASP A05 (Security Misconfiguration). Атакующий получает информацию о структуре кода, версиях фреймворка, путях на файловой системе.
# php.ini (production)
display_errors = Off
log_errors = On
error_log = /var/log/php/error.log
expose_php = OffВ Laravel: APP_DEBUG=false в .env. В Symfony: APP_ENV=prod.
Профилактика 500 ошибок
- мониторинг сайтов uptime — настройте Enterno.io Monitors с expected_code=200 на ключевые URL.
- APM / error tracking — Sentry, New Relic, DataDog ловят исключения до того, как пользователь увидит 500.
- Staging-окружение идентичное production.
- Ротация логов через logrotate — забитый диск = 500.
- Регулярные бэкапы БД и dependency-lock файлы в git.
Часто задаваемые вопросы (FAQ)
В: Чем отличается 500 от 502 и 503?
О: 500 — исключение в приложении. 502 — proxy не смог получить ответ от upstream. 503 — сервис временно недоступен (перегрузка, maintenance).
В: Google видит мой сайт как 500 — это плохо для SEO?
О: Да. Частые 500 снижают crawl rate и могут привести к деиндексации. Держите uptime выше 99.9%.
В: Как предупредить 500 до жалобы пользователя?
О: Мониторинг. Enterno.io шлёт алерт в Telegram/Email за секунды после первого фейла.
Заключение
500 — серверная проблема, и лечится только на сервере. Всегда начинайте с логов, никогда не показывайте детали ошибок пользователю, настраивайте мониторинг и APM. Для быстрой внешней диагностики используйте HTTP Header Checker от Enterno.io.
Проверьте ваш сайт прямо сейчас
Проверить →