1) Зафиксируйте симптомы
-
Ошибка на всех страницах или только на части?
-
Возникает постоянно или периодически?
-
Только у вас или у всех пользователей?
-
Связана с конкретным действием (форма, фильтр, поиск, корзина)?
Это поможет сузить круг: конфиг/сервер vs. код/плагин vs. нагрузка.
2) Посмотрите логи — это №1 источник причины
Где искать
-
Nginx/Apache error log
-
Nginx: обычно /var/log/nginx/error.log
-
Apache: /var/log/apache2/error.log или /var/log/httpd/error_log
-
PHP-FPM log (если PHP): /var/log/php*-fpm.log
-
Логи приложения: Laravel (storage/logs), Symfony (var/log), Bitrix (/bitrix/php_interface/... и журналы), WordPress (debug.log при включении).
Что искать в логах
-
PHP Fatal error, Uncaught Exception
-
Allowed memory size exhausted (не хватает памяти)
-
Permission denied (права/владелец)
-
Prematurely closed connection / upstream sent too big header
-
rewrite or redirection cycle (зацикливание редиректов)
-
connect() failed (111: Connection refused) (апстрим/бэкенд не отвечает)
3) Откатите последние изменения (самый быстрый “фикс”)
Если 500 началась “вдруг”:
-
откат деплоя/релиза;
-
отключение последних плагинов/модулей;
-
откат изменений в .htaccess, конфиге Nginx, PHP.ini, env-конфигах.
Если после отката исчезло — вы нашли область проблемы.
4) Проверьте конфигурацию веб-сервера
Для Nginx
-
Проверьте синтаксис: nginx -t
-
Перегрузка: systemctl reload nginx
Для Apache
-
Проверьте конфиг: apachectl configtest
-
Перезапуск/рестарт сервиса.
Типовые причины:
-
ошибка в правилах rewrite;
-
неправильный путь к сокету PHP-FPM;
-
конфликты виртуальных хостов.
5) Частые причины 500 и точечные решения
A) Ошибка в .htaccess (Apache) или rewrite-правилах
Симптом: 500 появляется сразу после правки правил.
Решение: временно переименуйте .htaccess (например, .htaccess.bak) и проверьте.
B) Права доступа и владелец файлов
Симптом: Permission denied в логах.
Решение:
-
проверьте владельца (www-data/nginx/apache);
-
права на директории/кеш/загрузки (особенно storage, cache, uploads).
C) Недостаточно памяти / лимитов PHP
Симптом: Allowed memory size exhausted, max_execution_time и т.п.
Решение:
-
увеличить memory_limit;
-
поднять max_execution_time для тяжёлых операций;
-
оптимизировать запрос/скрипт, который падает.
D) Падение PHP-FPM / приложения
Симптом: 502 бывает чаще, но иногда цепочкой приводит к 500 на уровне приложения.
Решение:
-
проверить статус php-fpm;
-
рестарт сервиса;
-
посмотреть ошибки в логах PHP и приложения.
E) Ошибка кода / исключение
Симптом: Fatal error, Uncaught Exception.
Решение:
-
включить безопасный debug (на staging);
-
найти точку падения по stack trace;
-
исправить модуль/плагин/шаблон.
F) База данных не отвечает / таймауты
Симптом: ошибки подключения, timeouts в логах.
Решение:
-
проверить доступность DB, лимиты соединений;
-
slow query log;
-
индексы, кеширование.
G) Перегрузка сервера
Симптом: 500 появляется под нагрузкой, скачками.
Решение:
-
посмотреть CPU/RAM/IO, количество процессов;
-
включить кеширование (страницы/опкод/объекты);
-
ограничить тяжёлые эндпоинты, оптимизировать.
6) Если сайт на WordPress (очень частый кейс)
Быстрый сценарий:
-
Отключите плагины (переименовать папку wp-content/plugins).
-
Переключите тему на дефолтную.
-
Включите логирование ошибок (WP_DEBUG, WP_DEBUG_LOG).
-
Проверьте .htaccess и лимиты PHP.
7) Если ошибка только на одной странице/функции
Проверьте:
-
конкретный контроллер/скрипт;
-
параметры запроса (длинные URL, фильтры, сортировки);
-
размер заголовков/cookie (бывает “упирается” в лимит апстрима);
-
обработку файлов (загрузка, генерация отчётов).
8) Быстрый чек-лист “за 10 минут”
-
Логи Nginx/Apache + PHP + приложение
-
Откат последнего деплоя/плагина/правил
-
Проверка .htaccess / nginx -t
-
Права/владелец на кеш/загрузки
-
Лимиты памяти/таймауты
-
Статус PHP-FPM/приложения/DB
-
Нагрузка сервера
Как предотвратить 500 в будущем
-
staging и автотесты перед релизом;
-
централизованный логинг + алерты;
-
мониторинг ресурсов и ошибок;
-
лимиты + rate limiting для тяжёлых эндпоинтов;
-
регулярный аудит плагинов/модулей.