Skip to content

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

HTTP 500 Internal Server Error — это код ответа, который сервер отдаёт когда что-то сломалось в приложении и нет более конкретного кода чтобы описать проблему. Это самая частая «общая» ошибка сервера: она означает «у меня внутри проблема, но я не могу сказать какая именно».

  • 🚨 Сайт не работает: пользователи видят ошибку, ничего не открывается
  • 🔍 Причина — на стороне сервера (а не у пользователя или провайдера)
  • 🛠️ Чинится разработчиками или системным администратором сайта
  • 📋 Главный инструмент диагностики — логи сервера (nginx error.log, app.log)

1. Ошибка в коде приложения

Section titled “1. Ошибка в коде приложения”

Самая частая причина. В PHP, Python, Node.js приложении произошло исключение, которое не было обработано. Например:

  • Не удалось подключиться к базе данных
  • Деление на ноль или другая логическая ошибка в коде
  • Превышен лимит памяти PHP/Python-процесса
  • Не найден файл который ожидался

2. Проблемы с базой данных

Section titled “2. Проблемы с базой данных”
  • БД упала или перегружена
  • Превышен лимит подключений (max_connections)
  • Заблокирована таблица из-за долгой транзакции
  • Не хватает места на диске под БД

3. Конфигурация веб-сервера

Section titled “3. Конфигурация веб-сервера”
  • Ошибка в .htaccess (Apache)
  • Неправильные права на файлы (CHMOD)
  • Закончилось место на диске
  • Нет прав на запись в tmp/ или logs/
  • Падение PHP-FPM, Python-приложения, Node.js-процесса
  • Перезапуск сервиса который застрял
  • OOM-killer убил процесс из-за нехватки памяти

1. nginx error log:

Terminal window
sudo tail -100 /var/log/nginx/error.log

Здесь будут видны ошибки upstream-сервера (PHP-FPM, gunicorn и т.п.).

2. Лог приложения:

  • PHP/Laravel: storage/logs/laravel.log
  • Django: logs/django.log или stderr
  • Node.js: куда вы пишете логи (PM2, journalctl, файл)
  • Rails: log/production.log

3. Системный лог:

Terminal window
sudo journalctl -u nginx --since "10 minutes ago"
sudo journalctl -u php8.2-fpm --since "10 minutes ago"

4. Состояние сервиса:

Terminal window
sudo systemctl status nginx
sudo systemctl status php8.2-fpm

Зависит от того что показали логи. Несколько типичных сценариев:

Сценарий A: упала база данных

Terminal window
sudo systemctl status mysql # или postgresql
sudo systemctl restart mysql

Сценарий B: PHP-FPM завис

Terminal window
sudo systemctl restart php8.2-fpm

Сценарий C: кончилась память (OOM)

Terminal window
free -h # посмотреть текущую память
dmesg | grep -i kill # был ли OOM-killer

Решение: увеличить swap или RAM, оптимизировать приложение.

Сценарий D: закончилось место на диске

Terminal window
df -h

Решение: очистить логи, временные файлы, увеличить диск.

Сценарий E: ошибка в свежем релизе Откатите последний деплой — часто 500-я появляется после неаккуратного обновления кода.

Если вы не технический специалист и видите 500 на своём сайте:

  1. Сначала позвоните хостеру — если у вас shared/cloud хостинг, проблема может быть у них
  2. Свяжитесь с разработчиком который ведёт ваш сайт — у него есть доступ к логам
  3. Если ничего не помогает — у нас есть инструмент: подключите ваш сайт к Monisite, и мы сразу заметим повторение проблемы, поможем понять закономерность

Если ваш сайт периодически падает с 500-ой ошибкой, и вы об этом узнаёте только от клиентов — это признак того, что нужен внешний мониторинг. Monisite:

  • Проверяет ваш сайт каждую минуту из 3 регионов
  • При появлении 500-й сразу присылает уведомление в Telegram/MAX/email
  • Показывает в кабинете историю всех инцидентов — видно когда падало, сколько длилось, был ли периодический сбой
  • Бесплатно, без лимита сайтов

Подключить мониторинг сайта →