HTTP 500 Internal Server Error¶
HTTP 500 Internal Server Error — стандартный код состояния HTTP, обозначающий, что сервер столкнулся с непредвиденной ошибкой при обработке запроса клиента и не смог выполнить его. Код относится к классу серверных ошибок (5xx): клиент отправил корректный запрос, однако проблема возникла на стороне сервера. В отличие от 4xx-кодов, 500 не указывает на конкретную причину сбоя — это общая «заглушка», сигнализирующая о внутренней ошибке.
¶Характеристики кода
Согласно RFC 7231 (HTTP/1.1: Semantics and Content), сервер, возвращающий 500, должен указать в ответе, содержит ли тело ответа описание ошибки. На практике большинство серверов отдают HTML-страницу с текстом «Internal Server Error» без деталей, чтобы не раскрывать внутреннюю информацию о конфигурации (защита от инфоприватности).
Код 500 является синхронным и не связан с повторными попытками по умолчанию: клиент не обязан повторять запрос автоматически, хотя в отдельных сценариях (например, при загрузке файла) повторная попытка может оказаться успешной, если ошибка была временной.
¶Основные причины
Наиболее частые причины возникновения ошибки 500:
- Синтаксические ошибки в коде сервера — исключение, необработанная ошибка выполнения, некорректная логика приложения.
- Ошибки конфигурации веб-сервера — повреждённый или некорректный
.htaccess(Apache), ошибки вnginx.conf, неправильные директивы виртуальных хостов. - Сбои файловых прав доступа — недостаточные права на файлы и каталоги приложения, запрет на запись в директорию сессий или кэша.
- Исчерпание ресурсов — нехватка оперативной памяти, превышение лимита времени выполнения скрипта (
max_execution_timeв PHP), переполнение диска. - Сбои сторонних компонентов — недоступность базы данных, некорректный ответ внешнего API, отсутствие драйвера или расширения.
- Повреждённые файлы приложения — частично загруженные или обновлённые файлы, конфликты версий.
¶Отличие от других ошибок 5xx
| Код | Название | Значение |
|---|---|---|
| 500 | Internal Server Error | Неспецифическая ошибка сервера |
| 501 | Not Implemented | Сервер не поддерживает необходимый метод запроса |
| 502 | Bad Gateway | Промежуточный сервер получил некорректный ответ от вышестоящего |
| 503 | Service Unavailable | Сервер временно не может обработать запрос (перегрузка, ТО) |
| 504 | Gateway Timeout | Промежуточный сервер не получил ответ от вышестоящего вовремя |
Ключевое отличие 500 от 503: при 503 сервер осознанно сообщает о недоступности (обычно временной), а 500 указывает на незапланированный сбой.
¶Диагностика
При появлении ошибки 500 первым шагом является проверка логов сервера:
- Apache — файлы
error.logиaccess.log(обычно в/var/log/apache2/или/var/log/httpd/). - Nginx —
error.log(по умолчанию/var/log/nginx/error.log). - PHP — лог ошибок PHP, включённый через
error_logвphp.ini; в режиме разработки (display_errors = On) детали ошибки выводятся прямо в браузере.
Типичный стек-трейс в логах указывает на файл и строку, где произошёл сбой, что существенно ускоряет поиск причины.
¶Устранение
Порядок действий при устранении 500 зависит от найденной причины. Если ошибка возникла после обновления кода — откат на предыдущую версию. Если после смены конфигурации — восстановление резервной копии конфига. Проверка прав доступа (chmod, chown), освобождение дискового пространства, увеличение лимитов памяти и времени выполнения — стандартные шаги.
Для веб-приложений на PHP рекомендуется включить подробное логирование ошибок, но отключить вывод ошибок на экран (display_errors = Off) в продакшен-среде.
¶См. также
- Коды состояния HTTP
- Веб-сервер
- Логирование (информационные технологии)
¶Источники
- RFC 7231 — HTTP/1.1: Semantics and Content
- RFC 9110 — HTTP Semantics
- Документация Apache HTTP Server
- Документация Nginx
- Документация PHP: обработка ошибок
