Ошибка 500 Internal Server Error: что это и как исправить

Ключевой вывод

HTTP-ошибка 500 (Internal Server Error) означает, что сервер столкнулся с неожиданным условием, которое не позволило ему выполнить запрос (RFC 9110): на сервере что-то сломалось, а что именно, он не сообщил. Посетителю стоит один раз обновить страницу через минуту и проверить, не недоступен ли сайт для всех; исправлять должен владелец. Владельцу сначала нужно прочитать лог ошибок. На nginx 500 чаще всего приходит от приложения за ним (PHP, Node, Python); на Apache проверьте .htaccess, лимиты PHP и плагины.

Проверьте сейчас

Руководство по исправлению ошибки HTTP 500 Internal Server Error — экран сбоя сервера и пошаговые решения для отладки
Руководство по исправлению ошибки HTTP 500 Internal Server Error — экран сбоя сервера и пошаговые решения для отладки
Начать чтение
  1. Что такое HTTP-ошибка 500?
  2. Как выглядит ошибка 500
  3. Ошибка 500 Internal Server Error на nginx
  4. Распространённые причины HTTP-ошибки 500
  5. Как исправить ошибку 500 (для посетителей)
  6. Способ 1: проверьте логи ошибок сервера
  7. Способ 2: проверьте и исправьте .htaccess
  8. Способ 3: исправьте права доступа к файлам
  9. Способ 4: увеличьте лимиты памяти и времени выполнения PHP
  10. Способ 5: отключите плагины и тему (CMS)
  11. Способ 6: проверьте подключение к базе данных и выполните восстановление
  12. Способ 7: проверьте совместимость версии PHP
  13. Способ 8: проверьте дисковое пространство
  14. 500 против 502, 503 и 504: в чём разница?
  15. Как ошибки 500 влияют на SEO
  16. Как предотвратить ошибки 500
  17. Часто задаваемые вопросы

Что такое HTTP-ошибка 500?

HTTP-ошибка 500 (Internal Server Error) означает, что на веб-сервере что-то сломалось при обработке вашего запроса, а что именно, сервер не сообщил. Это самая общая ошибка сервера.

Стандарт HTTP определяет её одним предложением: «The 500 (Internal Server Error) status code indicates that the server encountered an unexpected condition that prevented it from fulfilling the request» (RFC 9110 §15.6.1), то есть сервер столкнулся с неожиданным условием, которое не позволило ему выполнить запрос. В отличие от 503, эта ошибка ничего не говорит о том, временная ли проблема.

Почти всегда это баг, неверная конфигурация или сбой в серверном коде, а не результат действий посетителя. Исправить её должен владелец или администратор сайта.

Проверьте код ответа страницы

Как выглядит ошибка 500

Текст зависит от сервера и приложения:

  • 500 Internal Server Error — стандартная строка статуса
  • 500 Internal Server Error с подписью «nginx» ниже — собственная страница ошибки nginx
  • The server encountered an internal error or misconfiguration and was unable to complete your request. — страница Apache по умолчанию
  • На сайте возникла критическая ошибка. — страница фатальной ошибки WordPress в том виде, как она показывается на русском (по-английски: «There has been a critical error on this website.»)
  • HTTP Error 500.19 - Internal Server Error — IIS, где число после точки указывает причину (500.19: недопустимые данные конфигурации)
  • Страница недоступна · Сайт example.com пока не может обработать этот запрос. · HTTP ERROR 500 — Chrome, когда у ответа 500 нет собственной страницы
  • Request failed with status code 500 — Axios и другой JavaScript-код, который вызывает API
  • 500. That's an error. — собственная страница ошибки Google

Ошибка 500 Internal Server Error на nginx

Чаще всего nginx лишь передаёт дальше ошибку 500, которую вернуло приложение за ним (PHP-FPM, Node.js, Python); при PHP-FPM собственное сообщение об ошибке PHP попадает в лог nginx. В нескольких случаях nginx формирует 500 и сам. Строки в логе ошибок, которые стоит искать:

Строка в логе ошибок nginxЧто это значит
FastCGI sent in stderr: "PHP message: PHP Fatal error: …"PHP упал; сообщение называет файл и строку (ошибки PHP-FPM попадают в лог nginx)
rewrite or internal redirection cycle while internally redirecting to …Правила try_files или rewrite замыкаются на себя внутри nginx, часто из-за запасного пути вроде /index.html, которого нет (цикл, по которому идёт браузер, покажет вместо этого ERR_TOO_MANY_REDIRECTS)
open() "/etc/nginx/.htpasswd" failed (13: Permission denied)nginx не может прочитать файл паролей для auth_basic (если файла нет, будет 403)
pwritev() "/var/lib/nginx/body/…" failed (28: No space left on device)nginx не смог буферизовать на диск загрузку файла или большой POST: диск заполнен или во временную папку нельзя писать
(ничего для этого запроса)Ошибку 500 вернуло приложение на Node.js или Python, а nginx передал её дальше: читайте лог самого приложения
bash
# What did nginx log?
sudo tail -n 50 /var/log/nginx/error.log

# Look for loops in the loaded config
sudo nginx -T | grep -nE 'try_files|rewrite'

(Источник: код самого nginx; упавший или перегруженный бэкенд даёт 502 или 504, а не 500.)

Распространённые причины HTTP-ошибки 500

Ошибку 500 могут вызвать десятки проблем на стороне сервера. Самые частые:

  • Сломанный файл .htaccess — одна недопустимая директива или неверная RewriteRule заставляет Apache отвечать 500 для этого каталога и всего, что ниже.
  • Фатальные ошибки PHP — синтаксические ошибки, неперехваченные исключения или вызовы неопределённых функций останавливают скрипт.
  • Лимиты памяти и времени PHP — скрипт, превысивший memory_limit (по умолчанию 128M) или max_execution_time (30 секунд), останавливается.
  • Строки php_value на сервере с PHP-FPM — они работают только с mod_php в Apache; при PHP-FPM Apache отвергает их с ошибкой 500.
  • Неверные права доступа к файлам — PHP не может прочитать подключаемый файл, либо хостинг с suPHP/suEXEC отказывается работать с файлами, доступными на запись всем (777). (Файл, который не может прочитать сам веб-сервер, даёт 403.)
  • Плагин или тема — новое или обновлённое расширение WordPress, Joomla или Drupal, которое роняет весь сайт.
  • Сбои подключения к базе данных — неверные учётные данные, остановленный сервер БД или слишком много соединений.
  • Повреждённые файлы ядра — после неудачного обновления или прерванной загрузки.
  • Заполненный диск — сервер не может записывать логи, сессии и временные файлы.
  • Собственные причины nginx — цикл перезаписи, нечитаемый файл паролей или неудачная запись временного файла (часто из-за заполненного диска); см. раздел про nginx выше.

Как исправить ошибку 500 (для посетителей)

Если вы видите ошибку 500 на чужом сайте, проблема на стороне сервера, а не у вас. Тем не менее, есть несколько вещей, которые стоит попробовать.

  • Один раз обновите страницу через минуту (F5 или Cmd+R на Mac). Многие ошибки 500 длятся ровно столько, сколько идёт деплой или перезапуск.
  • Проверьте, не недоступен ли сайт для всех — Проверка доступности сайта открывает страницу из 11 мест, а Проверка HTTP-заголовков показывает точный код ответа, который получает наш сервер.
  • Удалите cookie сайта или попробуйте приватное окно. Повреждённый cookie сессии может заставить некоторые приложения выдавать ошибку на каждой странице только у вас.
  • Попробуйте позже — исправление делается на сервере, дайте владельцу время.
  • Сообщите владельцу сайта, если ошибка держится несколько часов, указав адрес страницы и время, когда она возникла.

Способ 1: проверьте логи ошибок сервера

Логи ошибок — это самый важный инструмент отладки ошибок 500. Они сообщают, что именно пошло не так, включая путь к файлу, номер строки и текст ошибки. Всегда проверяйте логи в первую очередь, прежде чем пробовать что-либо ещё.

bash
# Apache (PHP errors appear here too, as "AH01071: Got error 'PHP message: …'")
sudo tail -n 100 /var/log/apache2/error.log      # Debian/Ubuntu
sudo tail -n 100 /var/log/httpd/error_log        # RHEL/Alma/Rocky

# nginx (PHP errors appear here as "FastCGI sent in stderr")
sudo tail -n 100 /var/log/nginx/error.log

# PHP errors on RHEL-family PHP-FPM
sudo tail -n 100 /var/log/php-fpm/www-error.log

# PHP-FPM process log (pool restarts, pm.max_children)
sudo tail -n 100 /var/log/php8.3-fpm.log         # Debian/Ubuntu

# WordPress debug log (with WP_DEBUG_LOG on)
tail -n 100 /path/to/wordpress/wp-content/debug.log

Способ 2: проверьте и исправьте .htaccess

Сломанный файл .htaccess — классическая причина ошибок 500 на Apache: опечатка, неподдерживаемая сервером директива или неверная RewriteRule выводят каталог из строя. Лог ошибок Apache называет файл .htaccess и неверную директиву, например Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration.

Быстрее всего проверить это, временно переименовав файл. Если после переименования сайт загрузился, проблема была в .htaccess.

bash
# Rename to disable .htaccess
mv .htaccess .htaccess_backup

# If site loads, regenerate a clean .htaccess
# For WordPress, go to Settings > Permalinks and click Save

Способ 3: исправьте права доступа к файлам

Права доступа вызывают ошибку 500, когда PHP не может прочитать подключаемый файл, а также на хостингах с suPHP/suEXEC, которые отказываются работать с файлами, доступными на запись всем. Обычно ставят 644 для файлов и 755 для папок. Никогда не ставьте 777: это угроза безопасности, а на хостингах с suEXEC/suPHP оно само по себе вызывает 500.

bash
# Set correct directory permissions
find /path/to/webroot -type d -exec chmod 755 {} \;

# Set correct file permissions
find /path/to/webroot -type f -exec chmod 644 {} \;

# WordPress wp-config.php (extra security; 440 only if the PHP user owns the file or is in its group)
chmod 440 wp-config.php

Способ 4: увеличьте лимиты памяти и времени выполнения PHP

PHP останавливает скрипты, превысившие лимит памяти или максимальное время выполнения, и посетитель получает 500. Значения по умолчанию, 128M памяти и 30 секунд, для тяжёлых страниц часто слишком малы.

Увеличьте их там, где их читает ваш сервер. Для PHP-FPM отредактируйте php.ini для FPM (например, /etc/php/8.3/fpm/php.ini) и перезагрузите php-fpm; изменения в .user.ini могут вступать в силу до 5 минут.

bash
# Option 1: php.ini (best)
memory_limit = 256M
max_execution_time = 300

# Option 2: .htaccess (Apache with mod_php only; under PHP-FPM these lines cause a 500)
php_value memory_limit 256M
php_value max_execution_time 300

# Option 3: .user.ini (PHP-FPM and other FastCGI setups)
memory_limit = 256M

# Option 4: wp-config.php (WordPress)
define( 'WP_MEMORY_LIMIT', '256M' );

Способ 5: отключите плагины и тему (CMS)

Если вы используете WordPress, Joomla или другую CMS, неисправный плагин или тема — одна из самых частых причин ошибки 500. Самый быстрый способ проверки — отключить все плагины разом, а затем включать их по одному.

bash
# Disable all WordPress plugins (via the file system)
cd /path/to/wordpress/wp-content
mv plugins plugins_disabled

# Or with WP-CLI, without loading the plugin that crashes the site
wp plugin deactivate --all --skip-plugins --skip-themes

# Switch to a default theme (installs it if it was deleted)
wp theme install twentytwentyfive --activate --skip-plugins --skip-themes

# Check WordPress's own files, and reinstall them without touching wp-content
wp core verify-checksums
wp core download --skip-content --force

Способ 6: проверьте подключение к базе данных и выполните восстановление

Ошибка 500 может возникнуть, когда приложение не может подключиться к базе данных. Это происходит при неверных учётных данных, упавшем сервере базы данных или повреждённых таблицах.

Сначала проверьте учётные данные базы данных в конфигурационном файле (wp-config.php для WordPress, .env для Laravel). Затем протестируйте соединение и при необходимости восстановите повреждённые таблицы.

bash
# Test the MySQL connection
mysql -u username -p -h localhost database_name -e "SELECT 1;"

# Check tables (REPAIR only fixes MyISAM/Aria tables; for InnoDB, restore from a backup)
mysqlcheck -u username -p --check --auto-repair database_name

# WordPress: add to wp-config.php, then visit /wp-admin/maint/repair.php
# Remove this line when you're done: the repair page needs no login.
define( 'WP_ALLOW_REPAIR', true );

Способ 7: проверьте совместимость версии PHP

Код, написанный для старой версии PHP, может вызывать фатальные ошибки на более новой (или наоборот). После обновления PHP обычные виновники — удалённые функции и изменившееся поведение; устаревшие функции вызывают лишь уведомления.

Проверьте, какую версию PHP ваш сайт использует на самом деле. php -v в командной строке может показать не тот PHP, что использует сайт, поэтому посмотрите ещё и в панели хостинга или на временной странице с phpinfo():

bash
# Command-line PHP (may differ from the site's PHP-FPM)
php -v

# PHP-FPM versions installed (Debian/Ubuntu)
ls /etc/php/

# Modules loaded in the command-line PHP
php -m

Способ 8: проверьте дисковое пространство

Когда на сервере заканчивается место на диске (или inode), он не может записывать логи, временные файлы и данные сессий, и запросы начинают завершаться ошибкой 500.

bash
# Check disk space, and inodes (they can run out too)
df -h
df -i

# What's using the space?
sudo du -sh /var/log /tmp

# Free space without deleting the log you're reading
sudo find /var/log -name "*.gz" -mtime +14 -delete
sudo journalctl --vacuum-size=200M

500 против 502, 503 и 504: в чём разница?

Главное различие: 500 = сервер сломался изнутри. 502 = прокси получил от бэкенда мусор. 503 = сервер жив, но занят. 504 = прокси перестал ждать. Точный код ответа вашего сервера можно проверить с помощью проверки HTTP-заголовков DNS Robot.

Если ошибка — это 502, приложение может быть в порядке, а проблема находится между прокси и приложением. Этот случай разбирает наше руководство по 502 Bad Gateway.

КодНазваниеЧто это значитЧастая причина
500Internal Server ErrorСервер или приложение столкнулось с неожиданной ошибкой, например необработанным исключением или неверной конфигурациейФатальная ошибка PHP, сломанный .htaccess, исчерпание памяти
502Bad GatewayПрокси получил недопустимый ответ от бэкендаСбой PHP-FPM, бэкенд не запущен, сокет закрыт
503Service UnavailableСервер временно перегружен или на обслуживанииВсплеск трафика, плановое обслуживание, лимиты ресурсов
504Gateway TimeoutПрокси не дождался ответа от бэкендаМедленный запрос к БД, долгий скрипт, зависший upstream

Как ошибки 500 влияют на SEO

Что происходит, описывает сама документация Google (документация Google о поисковых роботах):

  • Сканирование замедляется. При ошибках 5xx Google снижает скорость сканирования сайта пропорционально числу URL, возвращающих ошибки.
  • Сначала проиндексированные страницы остаются. Уже проиндексированные URL некоторое время сохраняются, но URL, которые стабильно возвращают ошибку сервера, удаляются.
  • Восстановление идёт постепенно. Когда сервер снова отвечает кодом 2xx, Google постепенно наращивает сканирование.
  • Для плановой остановки на день-два используйте 503 с заголовком Retry-After (Google), чтобы простой воспринимался как временный (руководство по 503).

Как предотвратить ошибки 500

Профилактика всегда лучше отладки. Следуйте этим лучшим практикам, чтобы минимизировать риск ошибок 500 на вашем сайте.

  • Настройте мониторинг доступности — Используйте инструменты вроде UptimeRobot или Pingdom для проверки сайта каждые 1-5 минут. Получайте мгновенные оповещения при возникновении ошибки 500.
  • Всегда тестируйте изменения на staging — Никогда не деплойте напрямую в продакшен. Тестируйте обновления плагинов, обновления PHP и изменения конфигурации сначала в staging-среде.
  • Используйте систему контроля версий (Git) — Коммитьте каждое изменение, чтобы можно было мгновенно откатить неудачный деплой одной командой.
  • Реализуйте правильную обработку ошибок — Оборачивайте запросы к базе данных и вызовы API в блоки try-catch. Логируйте полные стеки ошибок на сервере.
  • Мониторьте дисковое пространство и ресурсы сервера — Настройте оповещения при использовании диска более 80%, высокой нагрузке на CPU и давлении на память.
  • Обновляйте программное обеспечение — Устаревшие версии CMS, плагинов и серверного ПО содержат известные баги, вызывающие сбои.
  • Обеспечьте автоматическое резервное копирование — Регулярно проверяйте процедуру восстановления. Бэкап, который вы ни разу не тестировали — не бэкап.
  • Установите адекватные лимиты PHP — Настройте memory_limit и max_execution_time исходя из реальной нагрузки, а не значений по умолчанию.
  • Используйте CI/CD-конвейеры — Автоматизируйте тестирование перед деплоем. Если тесты не прошли, деплой не должен выполняться.

Проверьте код ответа страницы

Бесплатная проверка HTTP-заголовков DNS Robot запрашивает любой URL с нашего сервера и показывает точный код ответа и заголовки, чтобы вы могли подтвердить ошибку 500 и увидеть, какой сервер её отправил.

Источники

  1. RFC 9110 §15.6.1: 500 Internal Server Error, IETF
  2. HTTP status codes and Google's crawlers, Google
  3. ngx_http_core_module.c (rewrite or internal redirection cycle), nginx
  4. Pause or disable a website, Google
  5. ngx_http_auth_basic_module.c (403 vs 500), nginx

Часто задаваемые вопросы

Что означает HTTP-ошибка 500?

Сервер столкнулся с неожиданной проблемой при обработке вашего запроса и не смог его завершить. Это общая «универсальная» ошибка: на стороне сервера что-то сломалось, а какой именно сбой, 500 не говорит. Подробности есть в логе ошибок сайта.

Как RFC 9110 определяет 500 Internal Server Error?

В разделе 15.6.1 сказано: «The 500 (Internal Server Error) status code indicates that the server encountered an unexpected condition that prevented it from fulfilling the request.» По смыслу: сервер столкнулся с неожиданным условием, которое не позволило ему выполнить запрос. RFC 9110 (июнь 2022) — действующий стандарт семантики HTTP.

Как исправить ошибку 500 Internal Server Error?

Сначала прочитайте лог ошибок сервера (Apache, nginx, PHP-FPM или вашего приложения). Затем проверьте обычных подозреваемых: файл .htaccess, лимиты памяти и времени PHP, недавно обновлённый плагин или тему, права доступа к файлам, подключение к базе данных и свободное место на диске.

Виноват ли я как посетитель в ошибке 500?

Почти никогда. Это ошибка на стороне сервера. Один раз обновите страницу через минуту, а если ошибка осталась, проверьте, не недоступен ли сайт для всех. Удаление cookie сайта может помочь в редком случае, когда ошибку вызывает повреждённый cookie сессии.

Что означает 500 Internal Server Error на nginx?

Обычно приложение за nginx (PHP, Node.js, Python) вернуло 500, а nginx передал его дальше; при PHP-FPM причина указана в логе ошибок nginx как «FastCGI sent in stderr». nginx формирует 500 и сам, например, при цикле перезаписи, нечитаемом файле auth_basic или неудачной записи временного файла (часто из-за заполненного диска).

В чём разница между ошибками 500 и 503?

500 означает, что что-то неожиданно сломалось. 503 означает, что сервер намеренно недоступен на время, из-за перегрузки или обслуживания, и может указать в заголовке Retry-After, когда повторить запрос. Для плановых работ отправляйте 503.

Может ли ошибка 500 повлиять на позиции в Google?

Короткие почти не имеют значения. Google замедляет сканирование, когда видит ошибки 5xx, и некоторое время сохраняет проиндексированные страницы, но URL, которые продолжают возвращать ошибки сервера, в итоге удаляются из индекса. Долгие ошибки 500 исправляйте быстро.

Что вызывает ошибку 500 в WordPress?

Обычно плагин или тема, роняющие PHP, сломанный файл .htaccess, лимит памяти PHP, неудачное обновление, после которого файлы ядра остались неполными, или подключение к базе данных. WordPress часто показывает «На сайте возникла критическая ошибка.» и отправляет письмо администратору.

Что означает «Request failed with status code 500»?

Это сообщение об ошибке Axios, HTTP-библиотеки для JavaScript: API, который вызвал ваш код, ответил 500. Проблема на том сервере. Прочитайте error.response.data, чтобы увидеть собственное сообщение API, и проверьте логи API, если он ваш.

Почему ошибка 500 появляется только на некоторых страницах?

Когда сбоят лишь некоторые страницы, причина в коде или данных за ними: повреждённая строка в базе данных, отсутствующий подключаемый файл или плагин, который работает только на определённых шаблонах. Лог ошибок называет файл и строку.

Об авторе

Shaik Vahid

Основатель DNS Robot. Вахид много лет работал в поддержке веб-хостинга: исправлял клиентам домены, DNS-записи, SSL-сертификаты и доставку почты. Он создаёт инструменты DNS Robot и пишет эти руководства по ошибкам, с которыми люди сталкиваются на самом деле.

Проверка HTTP-заголовков

Анализ HTTP заголовков ответа и оценка заголовков безопасности