Ошибка 500 (Internal Server Error): что это значит и как исправить
Ошибка 500 — это ответ сервера о том, что запрос дошёл, но обработать его не удалось из-за внутренней неполадки на сайте. Причина всегда конкретна и видна в журналах сервера: ошибка PHP, отказ базы данных, неверная директива конфигурации или превышение лимитов. Посетителю остаётся подождать и сообщить о проблеме, владельцу — открыть логи и пройти диагностику по цепочке «веб-сервер → PHP → приложение».
Содержание
Коротко: как исправить ошибку 500 на своём сайте
- Открыть журналы ошибок. Посмотрите error.log веб-сервера, лог PHP-FPM и журнал приложения. Найдите записи за время появления ошибки — там будет конкретная причина: имя файла, строка, текст исключения или сообщение о лимите.
- Проверить конфигурацию веб-сервера. Выполните nginx -t или apachectl configtest. Исправьте директивы, добавленные перед появлением ошибки, проверьте блок location для PHP и наличие fastcgi_param SCRIPT_FILENAME.
- Проверить PHP-FPM и лимиты. Убедитесь, что служба запущена, в пуле хватает процессов (pm.max_children), а memory_limit и max_execution_time достаточны для приложения. После правки перезагрузите службу.
- Изолировать приложение и CMS. Отключите плагины, переключите тему на стандартную, проверьте подключение к базе данных и права на файлы. Так находится конфликтующий компонент или повреждённый файл.
- Проверить ресурсы сервера. Команды df -h, df -i и free -m покажут переполнение диска, исчерпание inode или нехватку памяти — частая причина внезапной ошибки 500.
- Настроить мониторинг и страницу-заглушку. Подключите проверку доступности с оповещением, настройте ротацию логов и собственную страницу для кода 500, чтобы посетитель видел понятный текст вместо технического сообщения.
Что означает ошибка 500 простыми словами
Код 500 (Internal Server Error, «внутренняя ошибка сервера») — стандартный ответ веб-сервера, означающий: запрос от браузера получен, но выполнить его не удалось из-за неполадки на стороне сайта. Проблема не в интернете, не в устройстве и не в браузере посетителя. Сервер по спецификации HTTP относит такие сбои к группе 5xx — виновата принимающая сторона.
Главная особенность: код 500 общий. Он не сообщает, что именно сломалось, — ни типа ошибки, ни файла, ни строки. Конкретика всегда в журналах сервера. Поэтому фраза «исправить ошибку 500» на практике означает «найти в логах настоящую причину и устранить её».
Ещё одно следствие: 500 — это трёхзначный код состояния, а не «500 ошибок» и не номер строки. Встречающиеся записи вроде «ошибка 500 1» или «1 500 7» — это либо опечатки, либо склеенный текст сообщения и номера, но код всегда один — 500.
Как ошибка выглядит в браузерах
- Chrome и Edge — белая страница с надписью «This page isn't working», «HTTP ERROR 500» или «Страница не работает».
- Firefox — «The server encountered an internal error or misconfiguration and was unable to complete your request» либо пустой экран.
- Safari — короткое «Server error» или «Ошибка сервера».
- Мобильные браузеры — чаще всего лаконичное «Ошибка 500» или белый экран без текста.
Если на сайте настроена своя страница для внутренних ошибок, вместо технического текста откроется заглушка вида «Что-то пошло не так, попробуйте позже». Это нормальная практика: посетителю не показывают пути к файлам и версии библиотек.
Чем 500 отличается от похожих кодов
| Код | Что означает | Где сбой |
|---|---|---|
| 500 | Приложение ответило, но с ошибкой | Внутри кода, CMS или PHP |
| 502 | Прокси получил неверный ответ от приложения | Связь nginx и PHP-FPM или Node.js |
| 503 | Сервис недоступен: обслуживание, перегрузка, отключение | Сам сервис выключен |
| 504 | Приложение не ответило за отведённое время | Таймаут связи с приложением |
| 403 | Доступ запрещён | Права, правила доступа |
| 404 | Страница не найдена | Неверный адрес |
Практический вывод: 502 Bad Gateway и 504 Gateway Timeout указывают на проблемы обмена между веб-сервером и приложением, 503 Service Unavailable — на недоступный сервис, а 500 сообщает, что приложение работает и отвечает, но падает при обработке запроса. Путаница возникает из-за того, что падение PHP-FPM иногда отдаёт посетителю 502, а фатальная ошибка PHP — 500.
Причины ошибки
Что важно знать посетителю
Никакой полезной информации браузер не покажет. Многократное обновление страницы и повторная отправка форм обычно ничего не меняют, а повторная оплата может привести к двойному списанию, если первый запрос всё же дошёл до платёжной системы.
Причины для владельца сайта
- фатальная ошибка PHP: синтаксис, несовместимое расширение, устаревшая функция в новой версии PHP;
- превышение
memory_limitилиmax_execution_time; - недоступность базы данных: неверный пароль, упавший MySQL, переполнение соединений;
- неверные права на файлы и каталоги;
- заполненный диск или исчерпанные inode;
- ошибка в конфигурации nginx или Apache, неверная директива в
.htaccess; - повреждённые файлы ядра CMS, конфликт плагинов, неудачное обновление;
- исчерпание пула PHP-FPM (
pm.max_children); - необработанное исключение в приложении на Node.js.
Что делать посетителю
- Обновить страницу через минуту-две:
Ctrl+F5в Windows илиCmd+Shift+Rв macOS. - Открыть тот же адрес в другом браузере и с мобильного интернета — так исключаются кэш и расширения.
- Проверить главную страницу и другие разделы. Если ошибка только на одном адресе, дело в конкретной странице или форме.
- Не отправлять повторно оплату, если не появилось подтверждение операции.
- Подождать 15–30 минут, если на сайте идут обновления.
- Написать в поддержку сайта: адрес страницы, время, текст сообщения, устройство.
Очистка кэша, смена DNS и переустановка браузера не помогут: код 500 формируется на сервере.
Что делать владельцу: пошаговая диагностика
Шаг 1. Начать с журналов
tail -n 200 /var/log/nginx/error.log
tail -n 200 /var/log/apache2/error.log
tail -n 200 /var/log/php8.2-fpm.log
journalctl -u php8.2-fpm -n 100 --no-pager
Полезно сразу увидеть, какие адреса отдают сбой:
awk '$9 ~ /^5/ {print $4, $7, $9}' /var/log/nginx/access.log | tail -n 50
В панели хостинга журнал обычно называется «Логи» или «Журнал ошибок». В WordPress при включённом WP_DEBUG_LOG файл лежит в wp-content/debug.log.
Шаг 2. Временно включить подробный вывод
В php.ini:
display_errors = Off
log_errors = On
error_log = /var/log/php-errors.log
В wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
На рабочем сайте вывод ошибок в браузер держать включённым нельзя — это раскрывает служебную информацию. После диагностики настройки возвращают обратно.
Шаг 3. Проверить nginx
nginx -t
Ответ syntax is ok и test is successful означает, что конфигурация корректна. Типичная причина 500 — неполный блок обработки PHP:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Без строки SCRIPT_FILENAME PHP-FPM получает пустой путь к скрипту, в лог пишется Primary script unknown, а посетитель видит ошибку. Также стоит проверить каталог root и правила try_files.
Шаг 4. Проверить Apache и .htaccess
apachectl configtest
Ошибка в .htaccess даёт 500 на всём сайте. Быстрая проверка — временно убрать файл:
mv .htaccess .htaccess.bak
Если сайт заработал, причину ищут в директивах файла. Частый случай — php_flag и php_value при работе через PHP-FPM: эти директивы поддерживаются только модулем mod_php, а при FPM Apache отвечает Invalid command 'php_flag'.
Шаг 5. Проверить PHP-FPM и лимиты
systemctl status php8.2-fpm
php -i | grep -E 'memory_limit|max_execution_time'
Запись в логе server reached pm.max_children setting (5), consider raising it означает нехватку процессов. Значения подбирают под объём памяти сервера:
pm = dynamic
pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
Сообщение Allowed memory size of ... bytes exhausted указывает на нехватку памяти: помогает повышение memory_limit до 256M, но правильнее найти плагин или скрипт, который её расходует. После правки: systemctl reload php8.2-fpm.
Шаг 6. Изолировать приложение или CMS
- Отключить плагины:
mv wp-content/plugins wp-content/plugins_off, затем возвращать по одному. - Переключить тему на стандартную, переименовав её каталог.
- Проверить базу:
mysql -u user -p -h localhost dbname. - Выровнять права: файлы
644, каталоги755.
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;
Шаг 7. Node.js
pm2 logs --lines 200
pm2 restart app
NODE_ENV=production node server.js
Запуск вручную показывает стек исключения. Обработчик ошибок не должен отдавать наружу текст исключения:
app.use((err, req, res, next) => {
console.error(err);
res.status(500).send('Internal Server Error');
});
Шаг 8. Ресурсы сервера
df -h
df -i
free -m
Переполненный диск или исчерпанные inode не дают писать сессии, кэш и загрузки — приложение падает с ошибкой 500.
Как предотвратить повторение
- Мониторинг доступности. Проверка страницы раз в 1–5 минут с оповещением по почте или в мессенджер: UptimeRobot, Zabbix, Prometheus Blackbox exporter. Отслеживайте не только недоступность, но и коды ответа.
- Логи и ротация. Централизованный сбор (journald, rsyslog, Loki), настройка
logrotate, чтобы диск не заполнился журналами. - Обновления через тестовое окружение. Сначала проверка на копии сайта, затем перенос на рабочий сервер, обязательно с резервной копией.
- Реальные лимиты.
memory_limit,pm.max_children, таймауты — под фактическую нагрузку и объём памяти, с запасом. - Своя страница 500. Директива
error_page 500 /500.html;в nginx илиErrorDocument 500 /500.htmlв Apache. - Проверка состояния. Отдельный адрес вида
/healthz, который проверяет подключение к базе и отвечает кодом 200.
Смежные коды и их причины разобраны на страницах 403 Forbidden и 404 Not Found.
Частые вопросы
Ошибка 500 — это вирус или взлом сайта?
Сама по себе ошибка 500 говорит только о внутреннем сбое. Взлом может привести к ней косвенно — например, если изменённые файлы содержат синтаксическую ошибку или повреждена база данных. Проверить стоит: журналы сервера, даты изменения файлов и целостность ядра CMS.
Ошибка 500 у меня одного или у всех посетителей?
Скорее всего, у всех: код формируется на сервере и не зависит от устройства. Проверить просто — откройте тот же адрес с другого устройства, в другом браузере и через мобильный интернет. Если результат одинаковый, проблема на стороне сайта.
Поможет ли очистка кэша браузера или смена DNS?
Нет. Кэш браузера и настройки DNS влияют на то, как загружается страница, но не на ответ сервера. Код 500 приходит уже с сервера, поэтому чистить кэш и менять DNS бессмысленно.
Чем ошибка 500 отличается от 502, 503 и 504?
При 500 приложение ответило, но с ошибкой. При 502 проксирующий сервер получил неверный ответ от приложения, при 503 сервис отключён или перегружен, при 504 приложение не ответило за отведённое время. То есть 502 и 504 — сбой связи с приложением, 500 — сбой внутри него.
Может ли ошибка 500 появиться сама и исчезнуть?
Да. Кратковременные всплески дают переполнение пула PHP-FPM, недоступность базы данных на несколько секунд или разовый скачок нагрузки. Если ошибка повторяется, нужна диагностика по логам: единичный случай и регулярный сбой лечатся по-разному.
Что делать, если сайт на хостинге и доступа к логам нет?
Обратитесь в поддержку хостинга: укажите адрес страницы, время по серверу и текст сообщения. Многие панели управления показывают журнал ошибок в разделе логов, а файл debug.log может лежать в каталоге сайта.
Материал подготовлен редакцией справочника Торох и носит справочный характер: интерфейсы программ и настройки серверов зависят от версии. Нашли неточность? Напишите нам.
Читайте также
- Ошибка 502 Bad Gateway: что это значит и как исправить
- Ошибка 502 Bad Gateway в nginx: причины и способы исправления
- Ошибка 503 (Service Unavailable): что это значит и как исправить
- Ошибка 504 Gateway Timeout: что означает и как исправить
- Ошибка 403 Forbidden: что это значит и как исправить
- Ошибка 404: страница не найдена — что это значит и как исправить