Что ты будешь делать при появлении ошибки 500 (Internal Server Error)?

«Что ты будешь делать при появлении ошибки 500 (Internal Server Error)?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ошибка 500 — это общий сигнал о сбое в приложении. Мой план действий:

1. Локализация проблемы (Где и что сломалось?):

  • Логи веб-сервера: Первым делом смотрю error.log Nginx/Apache. Часто там есть более конкретная информация (например, Premature end of script headers).
  • Логи приложения: Открываю логи фреймворка (Laravel storage/logs/laravel.log, Symfony var/log/prod.log) или стандартный error_log PHP. Ищу стектрейс последней фатальной ошибки.
  • Быстрая проверка на staging/development: Включаю подробное логирование ошибок, если оно отключено в production.
    // Временная мера для диагностики на тестовом стенде
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

2. Анализ частых причин:

  • Синтаксическая ошибка или фатальная ошибка PHP: Проверяю последний задеплоенный код.
  • Исчерпание памяти: В логах ищу "Allowed memory size of X bytes exhausted". Решение — оптимизировать код или временно увеличить memory_limit.
  • Ошибка подключения к базе данных или внешнему сервису: Проверяю доступность сервисов и корректность конфигурационных данных (логины, пароли, хосты).
  • Проблемы с правами доступа к файлам: Убеждаюсь, что веб-сервер имеет права на запись в директории кеша, логов и загрузок.
  • Повреждение кеша или скомпилированных шаблонов: Очищаю кеш фреймворка (например, php artisan cache:clear, rm -rf var/cache/*).

3. Восстановление работы: После нахождения причины вношу целенаправленное исправление. Если проблема критическая и требует времени на исправление, могу временно откатиться на предыдущую стабильную версию приложения (rollback).