Ошибка 500 (Internal Server Error): что это значит и как исправить

Автор: Опубликовано: 7 минут чтения

Ошибка 500 — это ответ сервера о том, что запрос дошёл, но обработать его не удалось из-за внутренней неполадки на сайте. Причина всегда конкретна и видна в журналах сервера: ошибка PHP, отказ базы данных, неверная директива конфигурации или превышение лимитов. Посетителю остаётся подождать и сообщить о проблеме, владельцу — открыть логи и пройти диагностику по цепочке «веб-сервер → PHP → приложение».

Ошибка 500 (Internal Server Error): что это значит и как исправить
Схема: где возникает ошибка 500 Цепочка запроса: Браузер → nginx → PHP-FPM → Код приложения. Сбой между узлами «nginx» и «PHP-FPM». Браузер nginx PHP-FPM Код приложения Ошибка 500 Ответ с кодом ошибки возвращает узел «nginx»
Ошибка 500 (Internal Server Error): что это значит и как исправить: путь запроса и место сбоя.
Содержание
  1. Что означает ошибка 500 простыми словами
  2. Как ошибка выглядит в браузерах
  3. Чем 500 отличается от похожих кодов
  4. Причины ошибки
  5. Что делать посетителю
  6. Что делать владельцу: пошаговая диагностика
  7. Как предотвратить повторение

Коротко: как исправить ошибку 500 на своём сайте

  1. Открыть журналы ошибок. Посмотрите error.log веб-сервера, лог PHP-FPM и журнал приложения. Найдите записи за время появления ошибки — там будет конкретная причина: имя файла, строка, текст исключения или сообщение о лимите.
  2. Проверить конфигурацию веб-сервера. Выполните nginx -t или apachectl configtest. Исправьте директивы, добавленные перед появлением ошибки, проверьте блок location для PHP и наличие fastcgi_param SCRIPT_FILENAME.
  3. Проверить PHP-FPM и лимиты. Убедитесь, что служба запущена, в пуле хватает процессов (pm.max_children), а memory_limit и max_execution_time достаточны для приложения. После правки перезагрузите службу.
  4. Изолировать приложение и CMS. Отключите плагины, переключите тему на стандартную, проверьте подключение к базе данных и права на файлы. Так находится конфликтующий компонент или повреждённый файл.
  5. Проверить ресурсы сервера. Команды df -h, df -i и free -m покажут переполнение диска, исчерпание inode или нехватку памяти — частая причина внезапной ошибки 500.
  6. Настроить мониторинг и страницу-заглушку. Подключите проверку доступности с оповещением, настройте ротацию логов и собственную страницу для кода 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.

Что делать посетителю

  1. Обновить страницу через минуту-две: Ctrl+F5 в Windows или Cmd+Shift+R в macOS.
  2. Открыть тот же адрес в другом браузере и с мобильного интернета — так исключаются кэш и расширения.
  3. Проверить главную страницу и другие разделы. Если ошибка только на одном адресе, дело в конкретной странице или форме.
  4. Не отправлять повторно оплату, если не появилось подтверждение операции.
  5. Подождать 15–30 минут, если на сайте идут обновления.
  6. Написать в поддержку сайта: адрес страницы, время, текст сообщения, устройство.

Очистка кэша, смена 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 может лежать в каталоге сайта.

Материал подготовлен редакцией справочника Торох и носит справочный характер: интерфейсы программ и настройки серверов зависят от версии. Нашли неточность? Напишите нам.

Читайте также

Другие разделы