Коротко. 500 Internal Server Error означает, что сервер получил запрос, но не смог его обработать из-за внутренней ошибки. Это не один конкретный сбой. Код 500 служит общим сигналом, за которым может стоять ошибка в коде, CMS, конфиге, базе данных, правах доступа или на самом сервере.
Как читать материал. В каждом разделе два пути: сделать руками и инструментами или подключить нейросеть, которая ускоряет разбор. Третий пункт: проверка. Нейросеть не видит сервер и не читает логи без ваших данных, поэтому результат проверяем инструментами.
Что означает ошибка 500
500 относится к классу 5xx. Сервер принял запрос, но не смог его выполнить. В отличие от 404, где сервер сообщает, что ресурса нет, здесь запрос может быть корректным, а сбой происходит внутри сайта или инфраструктуры.
Пользователь видит стандартную страницу «Internal Server Error» или пустой экран. Подробности остаются в логах. Поэтому сначала нужно понять, на каком слое возникла ошибка, а не менять код наугад.
Поисковые системы считают 5xx временной ошибкой и повторяют запрос. Если ошибка держится долго, обход замедляется, а страницы могут перестать обновляться в индексе. Возвращать код 200 с текстом «ошибка» нельзя: для поиска это будет нормальная страница с непонятным содержимым.
500, 502, 503 и 504: в чём разница
| Код | Кто отвечает | Типичная причина | Что проверить первым |
|---|---|---|---|
| 500 | Сам сайт или приложение | Исключение в коде, фатальная ошибка PHP, конфиг, права, база | Логи приложения и веб-сервера |
| 502 | Прокси или шлюз | Верхний сервер не получил корректный ответ от сайта | Работает ли приложение, не падает ли PHP-FPM |
| 503 | Сервер | Перегрузка, обслуживание, нехватка ресурсов | Нагрузку, лимиты, статус хостинга |
| 504 | Прокси или шлюз | Верхний сервер не дождался ответа | Таймауты, медленные запросы, базу |
Один инцидент может выглядеть по-разному. Приложение падает с 500, прокси перед ним отдаёт 502, а при долгом запросе появляется 504. Смотрите, кто именно сформировал ответ.
Классический путь. Откройте DevTools → Network и посмотрите статус. Затем проверьте тот же URL через curl.
curl -I https://example.com/
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/
С нейросетью. Опишите симптом и попросите разложить его по слоям.
Сайт отдаёт 500 на всех страницах. До этого обновляли плагин и меняли .htaccess.
Помоги составить план диагностики: какие логи и команды проверить первыми.
Не предлагай удалять файлы и отключать всё сразу.
Проверка. Статус должен совпадать в браузере, curl и панели хостинга. Если код разный, ищите прокси или кэш между вами и сайтом.
Где именно возникла ошибка
Пять слоёв, которые нужно разделить:
- Код приложения: исключение, фатальная ошибка, несовместимость версии.
- CMS, плагины и тема: конфликт после обновления.
- Веб-сервер:
.htaccess, конфиг nginx, правила переадресации. - База данных: подключение, права, перегрузка, повреждение.
- Хостинг и инфраструктура: диск, память, сеть, прокси, обслуживание.
Если 500 появляется на всех сайтах одного сервера, проблема почти наверняка не в коде конкретного сайта. Если только на одной странице, начинайте с приложения и CMS.
Как найти причину
1. Зафиксируйте масштаб
Проверьте:
- одна страница или весь сайт;
- все пользователи или только вы;
- постоянно или периодически;
- что было до ошибки: обновление, деплой, смена настроек, переезд.
Если ошибка повторяется, сохраните URL, время и код ответа. Это понадобится хостингу и разработчику.
curl.2. Найдите логи
Точные пути зависят от сервера. Типичные варианты:
- nginx:
/var/log/nginx/error.log; - Apache:
/var/log/apache2/error.logили/var/log/httpd/error_log; - PHP: путь из
error_logв настройках; - CMS: отдельный лог, например
wp-content/debug.logпри включённой отладке WordPress; - панель хостинга: раздел с логами и ошибками.
Не угадывайте путь. Если доступа к файлам нет, запросите фрагмент лога у хостинга.
3. Читайте лог правильно
Ищите первую причинную ошибку, а не последнюю строку. Последняя часто является следствием.
Типичные маркеры:
PHP Fatal error;Allowed memory size exhausted;Maximum execution time exceeded;Permission denied;No such file or directory;Connection refused;mod_fcgid: stderr;upstream prematurely closed connection;rewrite or internal redirection cycle.
Классический путь. Посмотрите последние строки и отфильтруйте ошибки.
tail -n 100 /var/log/nginx/error.log
grep -i "error\|fatal\|exception" /var/log/nginx/error.log | tail -n 50
С нейросетью. Передайте только очищенный фрагмент лога.
Вот фрагмент лога с ошибкой 500. Сгруппируй строки по типам, выдели первую
причинную ошибку и предложи три проверки. Не придумывай строки, которых нет.
Я удалил IP, токены и пути к пользовательским файлам.
Проверка. Нейросеть не видит сервер. Каждую гипотезу подтвердите строкой лога, тестом или изменением на staging.
4. Проверьте последние изменения
500 часто появляется после обновления плагина, темы, PHP, смены .htaccess или деплоя. Составьте список изменений за последние сутки и откатывайте по одному.
Классический путь. Сверьте время ошибки с историей деплоев, обновлений и правок конфигов.
С нейросетью. Дайте список изменений и попросите план отката.
Вот список изменений за последние 24 часа. Ошибка 500 началась после одного из них.
Предложи порядок проверки и отката, начиная с наименее рискованного.
Не предлагай удалять базу или переустанавливать сервер.
Проверка. После каждого шага проверяйте статус через curl и смотрите, не появились ли новые ошибки в логе.
5. Проверьте ресурсы, права и базу
- Диск:
df -h. Переполненный диск часто даёт 500. - Память:
free -mи лимиты PHP. - Права:
ls -lдля файлов и каталогов. Типичные значения: 644 для файлов, 755 для каталогов. Не ставьте 777. - База: доступность сервера, логин, пароль, хост, лимиты подключений. Пароли в чат и логи не вставляйте.
- PHP: версия,
memory_limit,max_execution_time, наличие нужных расширений.
6. Включайте отладку безопасно
display_errors на живом сайте показывает пользователям пути, SQL и внутренние данные. Включайте подробный вывод только на тестовой копии или локально. На рабочем сайте включите логирование, а не показ ошибок.
Для WordPress:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Это пишет ошибки в лог, но не показывает их посетителям. Не редактируйте ядро WordPress и не отключайте все плагины на живом сайте без бэкапа.
Разбор проекта
Проверим сайт за вас
Посмотрим ошибки, логи и структуру, скажем, что исправлять первым. 20–30 минут в Zoom, Telegram или по телефону. Бесплатно.
Разобрать проектКак исправить по причинам
| Причина | Что делать | Проверка |
|---|---|---|
| Фатальная ошибка PHP | Прочитать лог, исправить код, проверить синтаксис | php -l, повторный запрос |
| Нехватка памяти | Поднять лимит или оптимизировать код | Лог без memory exhausted |
| Таймаут | Проверить тяжёлые запросы и лимиты | Ответ без 500/504 |
Ошибка .htaccess |
Вернуть бэкап, закомментировать правило | Сайт открывается, правило не ломает остальное |
| Ошибка nginx | Проверить конфиг | nginx -t, затем reload |
| Права доступа | Выставить корректные права и владельца | Файлы читаются, запись не открыта всем |
| База данных | Проверить подключение и сервер БД | Сайт подключается, ошибок в логе нет |
| Плагин или тема | Отключить на staging, проверить по одному | Ошибка не возвращается |
| Хостинг | Отправить данные в поддержку | Ответ с причиной и временем |
Не меняйте несколько вещей сразу. Иначе после исправления невозможно понять, что именно помогло.
Безопасная страница 500
Страница ошибки должна:
- отдавать код 500, а не 200;
- не показывать stack trace, SQL, пути и версии;
- объяснять, что случилось, без технических деталей;
- давать ссылку на главную или контакты;
- показывать короткий идентификатор для поддержки.
Пример для nginx:
error_page 500 502 503 504 /500.html;
location = /500.html {
internal;
}
Пример для Apache:
ErrorDocument 500 /500.html
Идентификатор запроса помогает связать обращение пользователя с логом. Пользователь присылает номер, вы находите запись.
Что отправить хостингу
- Приложите URL и время с часовым поясом.
- Укажите код ответа.
- Добавьте фрагмент лога без паролей и токенов.
- Опишите, что уже проверили.
- Перечислите, что меняли за последние сутки.
- Приложите скриншот, если он помогает.
- Уточните, воспроизводится ли проблема.
Чем точнее данные, тем быстрее ответ. Пароли, ключи и полные дампы базы не отправляйте.
Частые ошибки
- Включать
display_errorsна production. - Ставить права 777.
- Отключать все плагины на живом сайте без бэкапа.
- Редактировать ядро CMS.
- Удалять
.htaccessцеликом. - Возвращать 200 вместо 500.
- Игнорировать периодические ошибки.
- Верить ответу нейросети без проверки.
- Восстанавливать бэкап, не найдя причину: ошибка вернётся.
Когда нужен хостинг
Обратитесь в поддержку, если:
- 500 на всех сайтах сервера;
- 502, 503 или 504 приходит от прокси;
- в логах нет записей или доступа к ним нет;
- ошибка появилась до кода приложения;
- закончились диск, память или лимиты;
- проблема на стороне сети или обслуживания.
Вопросы
500: ошибка сервера или сайта?
Формально это класс 5xx, то есть ошибка на стороне сервера. Причина может быть в коде сайта, CMS, конфиге, базе или инфраструктуре. Поэтому сначала нужно найти слой.
Влияет ли 500 на SEO?
Пока ошибка временная, поиск повторяет запрос. Если 5xx держится долго, обход замедляется, а страницы могут перестать обновляться в индексе. Исправлять нужно быстро и не маскировать ошибку кодом 200.
Чем 500 отличается от 502 и 503?
500 отдаёт сам сайт или приложение. 502 означает, что прокси не получил корректный ответ от верхнего сервера. 503 означает, что сервер недоступен или перегружен. 504 означает, что прокси не дождался ответа.
Можно ли включить display_errors на живом сайте?
Нет. Это показывает пользователям пути, SQL и внутренние данные. Включайте подробный вывод только на тестовой копии, а на рабочем сайте пишите ошибки в лог.
Почему 500 то появляется, то исчезает?
Чаще всего это лимиты памяти, таймауты, перегрузка, нестабильная база или периодический конфликт плагинов. Смотрите логи за период, а не только в момент ошибки.
Может ли нейросеть исправить 500?
Нет. Она помогает разобрать лог, сгруппировать ошибки и составить план проверки. Статус, причину и исправление подтверждают инструментами и тестами.
Что делать, если нет доступа к логам?
Запросите фрагмент у хостинга. Укажите URL, время, код ответа и что уже проверили. Без логов диагностика превращается в угадывание.
Источники
Официальные документы 10
- MDN: 500 Internal Server Errordeveloper.mozilla.org
- RFC 9110, раздел 15.6.1rfc-editor.org
- MDN: 502 Bad Gatewaydeveloper.mozilla.org
- MDN: 503 Service Unavailabledeveloper.mozilla.org
- MDN: 504 Gateway Timeoutdeveloper.mozilla.org
- Google Search Central: HTTP status codesdevelopers.google.com
- nginx: директива error_lognginx.org
- Apache: логиhttpd.apache.org
- PHP: обработка ошибокphp.net
- WordPress: отладкаdeveloper.wordpress.org