Skip to content
EN
← Все статьи

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

Терминал с журналом ошибок сервера и браузер со страницей ошибки 500

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

Код 500 — серверная ошибка класса 5xx, которая говорит «что-то сломалось, но я не могу объяснить что». Это обобщённый (generic) код: сервер знает о проблеме, но не раскрывает детали клиенту из соображений безопасности. Для администратора 500 — красный флаг, требующий немедленного расследования через логи. Ниже — что означает этот код и как выглядит его текст в разных браузерах и программах, что делать посетителю, как владельцу найти причину в логах Apache, nginx и PHP-FPM и исправить её для WordPress, Laravel и Node.js, а также чем 500 отличается от 502, 503 и 504.

Что означает ошибка 500 и как переводится Internal Server Error

По RFC 9110 §15.6.1, код 500 указывает, что сервер столкнулся с непредвиденной ситуацией, которая помешала ему выполнить запрос. В отличие от 502 (bad gateway) или 503 (service unavailable), 500 обычно означает исключение в прикладном коде или проблему с интерпретатором. Проще говоря, запрос дошёл до сайта, сайт начал его обрабатывать — и «упал» на полпути.

Перевод Internal Server Error — «внутренняя ошибка сервера». Слово «внутренняя» здесь важно: сбой произошёл внутри сервера, а не в сети, не в браузере и не на компьютере пользователя. Фраза An internal server error has occurred переводится как «произошла внутренняя ошибка сервера» — это тот же код 500, только сформулированный самим приложением.

Как выглядит текст ошибки

Статус один, а надпись на экране зависит от того, кто её показывает: браузер, веб-сервер, CMS или клиентская библиотека.

Текст на экранеГде встречаетсяЧто это значит
Страница не работает (в старых версиях — «Страница недоступна»)… HTTP ERROR 500Google Chrome и другие браузеры на Chromium, если сервер не прислал своей страницыСервер вернул 500 и не прислал своей страницы ошибки
500 Internal Server ErrorСтандартная страница nginx или ApacheСбой в конфигурации сервера или в приложении за ним
Internal Server Error. The server encountered an internal error or misconfiguration and was unable to complete your request.ApacheЧаще всего ошибка в .htaccess или падение PHP-скрипта
На сайте возникла критическая ошибкаWordPress 5.2 и новееФатальная ошибка PHP в плагине или теме; подробности уходят письмом администратору
Request failed with status code 500JavaScript-приложения на axiosAPI вернул 500; причину нужно искать в логе бэкенда
An internal server error has occurred / Произошла ошибкаВеб-приложения, личные кабинеты, мобильные приложенияПриложение перехватило исключение и показало общую заглушку

Короткие коды вида «1:500:7» или «4:500» в лаунчерах и мобильных приложениях — внутренние коды самих программ, а не HTTP-статус; их расшифровывает поддержка конкретного сервиса.

Выдаёт ошибку 500 на сайте: что делать посетителю

Если вы просто открываете чужой сайт или входите в личный кабинет, а видите «500» или «ошибка входа 500», проблема почти наверняка на стороне сервиса. Что можно сделать:

  1. Обновить страницу через 1–2 минуты (F5 или Ctrl+R, на macOS — Cmd+R). Часть сбоев кратковременна: перезапуск процесса, выкладка новой версии.
  2. Не отправлять форму повторно при оплате или оформлении заказа — сначала проверьте почту и личный кабинет, иначе можно получить дубль платежа.
  3. Очистить cookies этого сайта — иногда сервер падает на повреждённой сессии. В Chrome: значок слева от адреса → «Настройки сайтов» → «Удалить данные».
  4. Открыть сайт в другом браузере или в режиме инкогнито (Ctrl+Shift+N) — так исключаются расширения и старая сессия.
  5. Проверить, недоступен ли сайт у всех, — через внешнюю проверку HTTP-ответа (ссылки в разделе «Как проверить» ниже).
  6. Написать в поддержку, указав адрес страницы, время и что вы делали перед ошибкой. Для администратора это ключ к нужной строке лога.

Смена DNS, перезагрузка роутера или переустановка браузера при 500 не помогают: запрос доходит до сервера, ошибка возникает уже там.

500 ошибка сервера: 10 частых причин

  1. Фатальная ошибка в PHP/Python/Node.js — unhandled exception, синтаксическая ошибка, out of memory.
  2. Неправильные права на файлы (.htaccess, скрипты) — chmod 644 для файлов, 755 для директорий.
  3. Ошибка подключения к базе данных — неправильные credentials, MySQL упал, max_connections исчерпан.
  4. Превышен memory_limit в PHP (php.ini) или heap size в Node.js.
  5. Бесконечный цикл или рекурсия — скрипт завис, превышен max_execution_time.
  6. Сломанная директива в .htaccess или nginx config — опечатка в модуле, отсутствующий модуль.
  7. Отсутствующая зависимость — не установлен composer-пакет, npm-модуль, Python library.
  8. Проблема с кэшем framework — устаревший Laravel config cache, Symfony var/cache.
  9. Несовместимая версия PHP — после обновления PHP на хостинге старый плагин или библиотека вызывает функцию, которой больше нет.
  10. Закончилось место или inode на диске — приложение не может записать сессию, кэш или лог.

Отдельно стоит отметить недавние изменения: в большинстве случаев 500 появляется сразу после обновления плагина, выкладки кода, правки .htaccess или смены версии PHP. Первый вопрос при разборе — «что меняли последним?».

Где искать логи: Apache, nginx, PHP-FPM

Первый шаг при 500 — прочитать логи. Никогда не гадайте, всегда смотрите stack trace. Пути зависят от дистрибутива: в Debian и Ubuntu Apache пишет в /var/log/apache2/, в RHEL, AlmaLinux и CentOS — в /var/log/httpd/.

# 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   # Debian/Ubuntu
tail -100 /var/log/httpd/error_log     # RHEL/AlmaLinux

# Laravel
tail -100 storage/logs/laravel.log

# Node.js (pm2)
pm2 logs --lines 100

Удобнее всего воспроизвести ошибку и смотреть лог в реальном времени:

# следить за логом, пока открываете страницу в браузере
tail -f /var/log/nginx/error.log

# искать фатальные ошибки PHP
grep -i "fatal" /var/log/php8.4-fpm.log | tail -20

# сообщения службы за последние 10 минут
journalctl -u php8.4-fpm --since "10 min ago"

# проверить синтаксис конфигурации до перезапуска
sudo nginx -t
sudo apachectl configtest

# свободное место и inode
df -h
df -i

На виртуальном хостинге без SSH логи ошибок обычно доступны в панели управления (раздел с журналами сайта) или лежат в каталоге logs рядом с корнем сайта. Подробнее о формате записей nginx и ротации — в статье про логи nginx.

Типичные строки в логе и что они значат

Строка в логеПричинаЧто делать
PHP Fatal error: Allowed memory size of 134217728 bytes exhaustedСкрипту не хватило memory_limit (здесь 128 МБ)Поднять лимит или найти утечку памяти в плагине
PHP Fatal error: Uncaught Error: Call to undefined function …Несовместимость с версией PHP или не установлено расширениеВернуть прежнюю версию PHP или обновить код, установить расширение
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configurationВ .htaccess директива модуля, который не включён (здесь mod_rewrite)a2enmod rewrite и перезапуск Apache
Invalid command 'php_value'…Директива php_value в .htaccess, а PHP работает через FPM, не mod_phpУбрать строку, перенести настройку в .user.ini или пул FPM
Request exceeded the limit of 10 internal redirects due to probable configuration errorЗациклились правила RewriteRuleДобавить условия RewriteCond, проверить правила
rewrite or internal redirection cycle while internally redirecting to "/index.php"Цикл в try_files nginx: файла index.php нет или неверен rootПроверить root и наличие файла
SQLSTATE[HY000] [2002] Connection refusedБаза данных не запущена или неверный хостsystemctl status mysql (или mariadb), проверить настройки подключения
No space left on deviceКончился дискПочистить логи и кэш, настроить ротацию

Как исправить ошибку 500 владельцу сайта

Порядок действий, который закрывает большинство случаев: прочитать лог → откатить последнее изменение → устранить конкретную причину → проверить ответ сервера снаружи.

Проверьте .htaccess

Переименуйте файл и откройте сайт снова: если 500 исчезла, ошибка в одной из директив.

mv .htaccess .htaccess.bak

Затем возвращайте правила блоками и смотрите, на каком ошибка появляется снова. Частые виновники — директивы php_value/php_flag на сервере с PHP-FPM, правила модулей, которые не включены, и зацикленные редиректы. Синтаксис и примеры правил разобраны в руководстве по .htaccess.

Исправьте права на файлы и владельца

Стандарт для большинства сайтов на PHP — 755 для каталогов и 644 для файлов, владелец — пользователь, от которого работает PHP. Права 777 не «чинят» ошибку, а открывают сайт для записи кому угодно; на части хостингов с suEXEC скрипт с правами на запись для группы или всех вообще не запустится.

find /var/www/site -type d -exec chmod 755 {} \;
find /var/www/site -type f -exec chmod 644 {} \;
chown -R www-data:www-data /var/www/site   # пользователь зависит от системы

Поднимите лимит памяти PHP

Если в логе Allowed memory size … exhausted, увеличьте memory_limit — в php.ini или в пуле PHP-FPM:

# php.ini
memory_limit = 256M
max_execution_time = 60

# или в пуле FPM, например /etc/php/8.4/fpm/pool.d/www.conf
php_admin_value[memory_limit] = 256M

# применить
sudo systemctl reload php8.4-fpm

Учтите, что php -i | grep memory_limit показывает настройки консольного PHP (CLI), а сайт работает через FPM со своим php.ini. Проверять действующее значение надёжнее через phpinfo() во временном файле, который потом нужно удалить. Если лимит приходится поднимать снова и снова, дело не в лимите, а в коде, который расходует память без меры.

WordPress

  • Переименуйте plugins/ → определите, какой плагин сломался. По SSH: mv wp-content/plugins wp-content/plugins.off, затем верните имя и отключайте плагины по одному.
  • Через WP-CLI: wp plugin deactivate --all, затем wp plugin activate имя-плагина по одному.
  • Проверьте тему — переименуйте каталог активной темы в wp-content/themes/, WordPress переключится на стандартную, если она установлена.
  • Увеличьте memory_limit в wp-config.php: define('WP_MEMORY_LIMIT', '256M');
  • Включите debug: define('WP_DEBUG', true); + define('WP_DEBUG_LOG', true); — ошибки пишутся в wp-content/debug.log. Добавьте define('WP_DEBUG_DISPLAY', false);, чтобы посетители не видели сообщения.
  • Проверьте .htaccess — переименуйте и зайдите в Настройки → Постоянные ссылки для регенерации.
  • Письмо о критической ошибке — WordPress отправляет его на адрес администратора со ссылкой на режим восстановления, где проблемный плагин можно отключить без SSH.

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/cache

Если после выкладки не выполнен composer install или не создан файл .env, Laravel тоже отдаст 500 — подробности будут в storage/logs/laravel.log.

Node.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

Если PHP-FPM не успевает ответить или присылает слишком большие заголовки, nginx обычно отдаёт не 500, а 504 (upstream timed out в логе) или 502 (upstream sent too big header). Для этих случаев помогают настройки:

fastcgi_read_timeout 60s;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
# increase in case of FastCGI timeout / buffer overflow

После правки — sudo nginx -t и sudo systemctl reload nginx. Сама 500 от связки nginx + PHP-FPM почти всегда означает фатальную ошибку PHP: её текст смотрите в логе FPM.

База данных

Проверьте, запущена ли СУБД (systemctl status mysql или systemctl status mariadb), совпадают ли логин, пароль и имя базы в конфиге сайта и не исчерпан ли лимит соединений. WordPress при сбое подключения показывает «Ошибка установки соединения с базой данных» и отдаёт код 500.

Чем 500 отличается от 502, 503 и 504

Все четыре кода — серверные, но указывают на разные места поломки. От этого зависит, куда смотреть в первую очередь.

КодНазвание и переводГде сбойТипичная причинаЧто проверить
500Internal Server Error — внутренняя ошибка сервераВ самом приложении или конфигурации сервераИсключение в коде, .htaccess, память, праваЛог PHP / приложения, последние изменения
502Bad Gateway — ошибочный шлюзМежду прокси (nginx, CDN) и бэкендомPHP-FPM или Node.js не запущен, упал процессСтатус бэкенда, лог nginx
503Service Unavailable — сервис недоступенСервер временно не принимает запросыПерегрузка, режим обслуживания, лимитыНагрузку, режим maintenance, заголовок Retry-After
504Gateway Timeout — шлюз не дождался ответаПрокси не дождался бэкендаДолгий запрос к БД, медленный внешний APIТаймауты прокси, медленные запросы

Подробные разборы соседних кодов: 502 Bad Gateway, 503 Service Unavailable и 504 Gateway Timeout.

Ошибка запроса 500 в API: request failed with status code 500

Сообщение Request failed with status code 500 генерирует HTTP-клиент axios, когда API вернул код 500. Сам клиент в этом не виноват: ответ сформировал сервер. Чтобы понять причину:

  • Повторите запрос через curl и посмотрите тело ответа — API часто присылает описание ошибки в JSON: curl -i -X POST https://api.example.com/v1/orders -H "Content-Type: application/json" -d '{"id":1}'.
  • В браузере откройте DevTools (F12) → вкладка Network → нужный запрос → Response.
  • Если вы разработчик API — найдите запрос в логе по времени или по идентификатору запроса из заголовков ответа.
  • Автоматически повторяйте только идемпотентные запросы (GET, PUT, DELETE) и с паузой; повтор POST может создать дубль заказа или платежа.

Если 500 приходит только на определённые входные данные, почти всегда это необработанный случай в коде: пустое поле, неожиданный тип, отсутствующая запись в базе. Правильное поведение API — отвечать на ошибку клиента кодом 4xx (например, 400 или 422), а 500 оставлять для настоящих сбоев сервера.

Как проверить, отдаёт ли сайт 500

Быстро узнать код ответа можно из терминала:

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/
curl -I https://example.com/

Для быстрой диагностики снаружи используйте HTTP Header Checker и Security Scanner от Enterno.io — они покажут, как отвечает сервер и утекает ли информация через заголовки. Проверка извне полезна и посетителю: если внешний сервис тоже получает 500, сайт недоступен у всех, а не только у вас. Чтобы не узнавать о сбое от клиентов, поставьте страницу на мониторинг доступности с ожидаемым кодом 200.

Безопасность: не раскрывайте stack trace в production

Никогда не показывайте полный stack trace в production — OWASP относит это к категории 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 без технических деталей: в nginx — директивой error_page 500 /500.html;, в Apache — ErrorDocument 500 /500.html.

Профилактика 500 ошибок

  • Мониторинг uptime — настройте Enterno.io Monitors с expected_code=200 на ключевые URL.
  • APM / error tracking — Sentry, New Relic, DataDog ловят исключения до того, как пользователь увидит 500.
  • Staging-окружение идентичное production: та же версия PHP, те же модули.
  • Ротация логов через logrotate — забитый диск = 500.
  • Регулярные бэкапы БД и dependency-lock файлы в git (composer.lock, package-lock.json).
  • Обновления по одному — плагины и зависимости обновляйте поочерёдно, чтобы сразу видеть, после чего сломалось.

500 — серверная проблема, и лечится только на сервере. Всегда начинайте с логов, никогда не показывайте детали ошибок пользователю, настраивайте мониторинг и APM. Для быстрой внешней диагностики используйте HTTP Header Checker от Enterno.io.

Частые вопросы

Что значит код 500 простыми словами?

Сайт получил ваш запрос, но при его обработке у него что-то сломалось: упал скрипт, не хватило памяти, не ответила база данных. Проблема на сервере, а не у вас.

Как исправить ошибку 500, если это не мой сайт?

Никак, кроме ожидания: обновите страницу через несколько минут, попробуйте другой браузер или режим инкогнито, очистите cookies сайта. Если не помогает — сообщите в поддержку сервиса время и адрес страницы.

Чем отличается 500 от 502 и 503?

500 — исключение в приложении. 502 — proxy не смог получить ответ от upstream. 503 — сервис временно недоступен (перегрузка, maintenance).

Влияет ли 500 на SEO?

Да. Частые 500 снижают частоту обхода, а если страница отдаёт 500 долго, поисковые роботы могут исключить её из индекса. Короткий сбой на несколько минут обычно проходит без последствий, но дольше тянуть с исправлением не стоит.

Как предупредить 500 до жалобы пользователя?

Мониторинг. Enterno.io шлёт алерт в Telegram/Email сразу после неудачной проверки.

Почему 500 появляется только иногда?

Плавающая 500 обычно связана с ресурсами: памяти или соединений с базой не хватает в пиковые моменты, отдельные тяжёлые страницы упираются в лимит времени, один из нескольких серверов за балансировщиком работает на старой версии кода. Ищите в логе время ошибок и сопоставляйте с нагрузкой.

Проверьте ваш сайт прямо сейчас

Проверить HTTP-статус сайта →
Другие статьи: HTTP
HTTP
HTTP-заголовки: полный разбор запроса и ответа сервера
10.03.2025 · 1 721 просм.
HTTP
Жизненный цикл HTTP-запроса: от URL до готовой страницы
16.03.2026 · 1 246 просм.
HTTP
Ошибка 400 Bad Request: что значит код и как исправить
13.07.2026 · 1 143 просм.
HTTP
HTTP-методы: GET, POST, PUT, DELETE и другие
16.03.2026 · 1 068 просм.