#Что означает ошибка
500 Internal Server Error
HTTP 500 — общий ответ: сервер получил запрос, но не смог его выполнить, а причина указана не в браузере, а в журнале ошибок. Для посетителя сделать почти ничего нельзя: можно обновить страницу и подождать. Владельцу сайта нужно искать запись в error.log веб-сервера или PHP — там почти всегда написана строка и файл, где произошёл сбой.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Ошибка в кодеФатальная ошибка PHP или исключение. | В error.log строка «PHP Fatal error». | Исправьте код или откатите изменения. |
| Неверный .htaccessСинтаксическая ошибка или неподдерживаемая директива. | Сбой сразу после правки. | Переименуйте .htaccess. |
| Неверные праваПрава на файлы слишком строгие или широкие. | В логе «Permission denied»/«SoftException». | Каталоги 755, файлы 644. |
Не хватает памяти или ресурсовПревышены memory_limit или лимиты хостинга. | «Allowed memory size exhausted». | Увеличьте лимит. |
#Пошаговое решение
- Подождите и обновитеЕсли вы просто посетитель сайта, подождите несколько минут и один раз обновите страницу клавишами
Ctrl+F5. Попробуйте открыть главную страницу того же сайта. Ошибка 500 обычно возникает на сервере и не исправляется очисткой ваших паролей или переустановкой браузера; при повторении сообщите владельцу адрес страницы и время ошибки. - Откройте журнал ошибокДля владельца сайта. Откройте панель хостинга и найдите раздел «Журналы/Логи» для проблемного домена, затем посмотрите записи на момент ошибки. На собственном сервере журнал Apache часто расположен в
/var/log/apache2/error.log, Nginx — в/var/log/nginx/error.log; фактические пути зависят от настройки виртуального хоста и PHP-FPM. - Найдите последнюю ошибкуДля владельца сервера. Получите из панели или настроек сайта точный путь к журналу PHP либо веб-сервера. Подключитесь по SSH и выполните
sudo tail -n 80 /var/log/nginx/error.logтолько если этот журнал действительно используется; для Apache или PHP-FPM путь может отличаться. Найдите запись, совпадающую со временем ошибки, доменом и запросом; при наличииFatal errorзапишите файл и строку. Не отправляйте полный журнал публично — там могут быть токены, пути и данные пользователей.Linux · Терминал (Bash)КомандаНужен sudoЭто АЛЬТЕРНАТИВЫ для администратора Linux: используйте только журнал своего сервера (пути могут отличаться). Команды ничего не исправляют, только показывают сообщения; не выполняйте массовый chmod или chown. Синтаксис PHP проверяйте отдельно через CLI той же версии, что использует сайт.sudo tail -n 80 /var/log/nginx/error.logsudo tail -n 80 /var/log/apache2/error.log - Проверьте .htaccessЕсли ошибка появилась сразу после изменения
.htaccess, сохраните резервную копию файла и временно верните его прежнюю рабочую версию. На Apache переименование файла может помочь проверить влияние правил, но на Nginx.htaccessвообще не обрабатывается. Не удаляйте правила безопасности и перенаправления без понимания последствий; после проверки восстановите нужные настройки. - Проверьте праваТолько администратору. Если журнал показывает
Permission denied, выясните, какой конкретный файл или каталог недоступен и под каким пользователем работает PHP-FPM. Для диагностики используйтеls -ldдля самого каталога и каждого родительского каталога иls -lдля файла. Сравните владельца и разрешения с рабочим соседним сайтом и документацией панели. Исправляйте только проблемный путь после резервной копии; не применяйтеchmod -R,chown -Rи 777 ко всему сайту. - Проверьте версию PHPЕсли ошибка появилась после переключения версии PHP, в панели хостинга посмотрите, какой обработчик и версия назначены домену. Проверьте совместимость кода и расширений, а затем откройте журнал PHP именно для этого сайта. Не меняйте версию сразу на всех сайтах; сначала устраните конкретную ошибку или безопасно вернитесь к предыдущей поддерживаемой конфигурации.
- Отключите плагиныДля WordPress проверьте в журнале название сбойного дополнения. Если панель недоступна, через FTP можно временно переименовать папку только подозреваемого дополнения внутри
wp-content/plugins, предварительно сохранив её копию. Это может отключить его функции; после проверки верните имя и исправьте или обновите дополнение штатно. - Увеличьте лимитыТолько администратору и только при подтверждённом исчерпании памяти. Если журнал содержит
Allowed memory size exhausted, проверьте версию PHP иmemory_limitдля сайта в панели, а также доступную оперативную память и число процессов PHP. При достаточном ресурсе допустимо увеличить лимит для этого сайта в настройке обработчика PHP и повторить запрос, записав прежнее значение для отката. Если ошибка другая, менять лимит бессмысленно; при повторной нехватке памяти ищите причину расхода в коде.
После обновления CMS сначала сопоставьте время ошибки 500 с журналом PHP и изменёнными файлами; при необходимости восстановите конкретное неудачное обновление из проверенной резервной копии, а не всю систему наугад. Для WordPress отладку включайте лишь временно: в wp-config.php после резервной копии задайте WP_DEBUG и WP_DEBUG_LOG как true, а WP_DEBUG_DISPLAY как false; проверьте, что журнал wp-content/debug.log не доступен посторонним через веб. После диагностики выключите отладку и удалите конфиденциальные записи по правилам проекта. При нехватке места проверьте df -h и df -i.