Другое 500Высокая

Ошибка 500: как диагностировать и устранить Internal Server Error

Ошибка 500 возникает, когда сервер не может выполнить запрос. Статья объясняет, как через логи определить точную причину и применить проверенные методы исправления для веб-серверов, языков программирования и CMS.

Обновлено 4 марта 2026 г.
20-40 мин
Средняя
FixPedia Team
Применимо к:Веб-серверы: Apache 2.4+, Nginx 1.18+, IIS 10.0+Языки: PHP 7.4+, Python 3.8+, Node.js 14+CMS: WordPress 5.0+, Joomla 3.9+, Drupal 9.xХостинги: с доступом к логам и конфигурационным файлам

Что такое ошибка 500

Пример ошибки 500

Ошибка 500 (Internal Server Error) — это общий код ответа HTTP, который означает, что сервер столкнулся с непредвиденным условием и не может выполнить запрос. В отличие от ошибок 4xx, где проблема обычно в запросе клиента, 500-я серия указывает на сбой на стороне сервера. Пользователь видит стандартное сообщение без деталей, а точная причина фиксируется в логах. К распространённым причинам относятся:

  • Синтаксические ошибки в коде приложения (PHP, Python, Node.js).
  • Недостаточно прав на файлы или папки для веб-сервера.
  • Превышение лимитов памяти или времени выполнения.
  • Некорректная конфигурация веб-сервера (Apache, Nginx, IIS).
  • Конфликты между плагинами, модулями или библиотеками.
  • Проблемы с подключением к базе данных.

Пошаговая диагностика и исправление

Шаг 1: Найдите детали ошибки в логах сервера

Логи — ваш главный источник информации. Без них вы действуете вслепую.

  1. Определите веб-сервер. Распространённые пути к логам:
    • Apache: /var/log/apache2/error.log (Debian/Ubuntu) или /var/log/httpd/error_log (CentOS/RHEL).
    • Nginx: /var/log/nginx/error.log.
    • IIS: %SystemDrive%\inetpub\logs\LogFiles\W3SVC1.
    • На shared-хостинге логи часто доступны через панель управления (cPanel → «Metrics» → «Errors»).
  2. Найдите записи, соответствующие времени ошибки. Пример для PHP:
    [04-Mar-2026 14:30:22] PHP Fatal error:  Uncaught Error: Call to undefined function some_function() in /var/www/html/index.php:15
    Stack trace:
    #0 {main}
      thrown in /var/www/html/index.php on line 15
    

    Здесь видно: в index.php на строке 15 вызвана несуществующая функция.
  3. Если логи пустые, включите детальное логирование:
    • Для PHP в php.ini: log_errors = On, error_log = /var/log/php_errors.log.
    • Для Apache: LogLevel debug в конфигурации виртуального хоста.
    • Для Nginx: error_log /var/log/nginx/error.log debug;.

💡 Совет: Если вы не знаете, где логи, создайте тестовый PHP-файл с <?php phpinfo(); ?> и найдите раздел error_log. Или проверьте конфигурацию веб-сервера: для Apache grep -r "ErrorLog" /etc/apache2/, для Nginx grep -r "error_log" /etc/nginx/.

Шаг 2: Проверьте недавние изменения в коде или конфигурации

Ошибка 500 часто появляется после:

  • Обновления CMS (WordPress, Joomla, Drupal).
  • Установки нового плагина, модуля или темы.
  • Редактирования .htaccess, nginx.conf, web.config.
  • Внесения изменений в код приложения.

Что делать:

  1. Восстановите резервную копию, созданную до изменений. Если её нет:
  2. Вручную откатите изменения:
    • Для WordPress: через FTP переименуйте папку плагина (wp-content/plugins/имя-плагинаwp-content/plugins/имя-плагина.disabled). Если ошибка исчезнет, проблема в этом плагине. То же для темы (wp-content/themes).
    • Для конфигов: восстановите предыдущую версию из истории редактора или бэкапа.
  3. Проверьте, исчезла ли ошибка. Если да — ищите конкретную ошибку в откаченном коде (возврат к шагу 1).

Шаг 3: Убедитесь в правильности прав доступа

Неправильные права на файлы — частая причина 500, особенно после переноса сайта или смены хостинга.

Стандартные права:

  • Файлы: 644 (-rw-r--r--).
  • Папки: 755 (drwxr-xr-x).
  • Владелец: пользователь веб-сервера (например, www-data для Apache/Nginx на Debian/Ubuntu, apache на CentOS).

Как применить на Linux:

cd /var/www/html  # Перейдите в корень сайта
sudo chown -R www-data:www-data .  # Замените www-data на вашего пользователя
sudo find . -type f -exec chmod 644 {} \;
sudo find . -type d -exec chmod 755 {} \;

Для Windows (IIS):

  1. Откройте свойства папки сайта → «Безопасность».
  2. Нажмите «Изменить» → «Добавить».
  3. Введите IIS_IUSRS, нажмите «Проверить имена».
  4. Установите права: «Чтение и выполнение», «Чтение».
  5. Убедитесь, что IUSR также имеет права «Чтение».

Шаг 4: Проверьте и увеличьте лимиты ресурсов

Если в логах есть Allowed memory size of X bytes exhausted (PHP) или Maximum execution time of X seconds exceeded, нужно увеличить лимиты.

  1. Найдите php.ini:
    php --ini | grep "Loaded Configuration File"
    

    Или создайте info.php с <?php phpinfo(); ?> и откройте в браузере.
  2. Измените параметры в php.ini:
    memory_limit = 256M      ; Было 128M или меньше
    max_execution_time = 60 ; Было 30 или меньше
    post_max_size = 32M      ; Для загрузки файлов
    upload_max_filesize = 32M
    
  3. Перезапустите веб-сервер:
    sudo systemctl restart apache2   # Apache
    sudo systemctl restart nginx     # Nginx
    sudo systemctl restart php-fpm   # Если используется PHP-FPM
    
  4. Если нет доступа к php.ini (shared-хостинг):
    • Для Apache: добавьте в .htaccess в корне сайта:
      php_value memory_limit 256M
      php_value max_execution_time 60
      
    • Для некоторых хостеров: создайте user.ini в корне сайта с теми же директивами.

Шаг 5: Отключите плагины/модули для поиска конфликта

Если ошибка появилась после установки/обновления плагина в CMS.

WordPress:

  1. Через FTP переименуйте папку /wp-content/plugins в plugins.off. Это отключит все плагины.
  2. Если ошибка исчезнет, переименуйте обратно и отключайте плагины по одному, переименовывая их папки (например, akismetakismet.off), пока ошибка не вернётся.
  3. Проверьте совместимость плагина с вашей версией WordPress.

Joomla:

  1. Если есть доступ в админку, отключите все расширения через «Менеджер расширений».
  2. Если доступа нет, через FTP переименуйте папки в /administrator/components/ и /components/.
  3. Проверьте логи Joomla в /administrator/logs/.

Drupal:

  1. Если доступен Drush, выполните drush pm-disable --all.
  2. Иначе через FTP переименуйте папки модулей в /modules/ и /sites/all/modules/.

Шаг 6: Проверьте корректность конфигурационных файлов

Ошибки в конфигах веб-сервера — частая причина 500.

Apache (.htaccess и конфиги):

  1. Проверьте синтаксис .htaccess в корне сайта. Удалите все строки и добавляйте по одной, проверяя ошибку.
  2. Проверьте основной конфиг: sudo apachectl configtest. Вывод Syntax OK означает корректность.
  3. Убедитесь, что нужные модули включены: sudo a2enmod rewrite (если используются ЧПУ).

Nginx (nginx.conf и файлы в sites-enabled):

  1. Проверьте синтаксис: sudo nginx -t.
  2. Убедитесь, что в location-блоках нет опечаток, а proxy_pass (если есть) указывает на правильный адрес (например, http://127.0.0.1:8000).
  3. Проверьте права на файлы, указанные в root или alias.

PHP (php.ini):

  1. Откройте php.ini и проверьте на синтаксические ошибки (пропущенные кавычки, точки с запятой).
  2. Убедитесь, что необходимые расширения включены (например, extension=mysqli, extension=gd).
  3. Проверьте, что display_errors = Off на продакшене (но log_errors = On).

Ошибки в .htaccess (Apache) или nginx.conf (Nginx) вызывают 500.

Файл .htaccess Apache с синтаксической ошибкой, вызывающей 500 ошибку

Синтаксическая ошибка в конфигурационном файле .htaccess приводит к Internal Server Error

Apache (.htaccess и конфиги):

  1. Проверьте синтаксис .htaccess в корне сайта. Удалите все строки и добавляйте по одной, проверяя ошибку.
  2. Проверьте основной конфиг: sudo apachectl configtest. Вывод Syntax OK означает корректность.
  3. Убедитесь, что нужные модули включены: sudo a2enmod rewrite (если используются ЧПУ).

Nginx (nginx.conf и файлы в sites-enabled):

  1. Проверьте синтаксис: sudo nginx -t.
  2. Убедитесь, что в location-блоках нет опечаток, а proxy_pass (если есть) указывает на правильный адрес (например, http://127.0.0.1:8000).
  3. Проверьте права на файлы, указанные в root или alias.

PHP (php.ini):

  1. Откройте php.ini и проверьте на синтаксические ошибки (пропущенные кавычки, точки с запятой).
  2. Убедитесь, что необходимые расширения включены (например, extension=mysqli, extension=gd).
  3. Проверьте, что display_errors = Off на продакшене (но log_errors = On).

Профилактика ошибки 500

  • Регулярно проверяйте логи сервера (раз в неделю или после каждого обновления). Настройте мониторинг через Logwatch, Papertrail или аналоги.
  • Тестируйте все изменения на staging-окружении перед продакшеном.
  • Используйте систему контроля версий (Git) для быстрого отката.
  • Следите за лимитами ресурсов: мониторьте потребление памяти (memory_get_usage() в PHP) и времени выполнения.
  • Обновляйте ПО постепенно: ядро CMS, плагины, библиотеки — по одному, и только с официальных источников.
  • Настройте кастомную страницу ошибок (например, ErrorDocument 500 /500.html в Apache), чтобы пользователи видели дружелюбный интерфейс, но не отключайте логирование.

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

Почему возникает ошибка 500 и как её определить?
Как действовать, если нет доступа к логам сервера?
В чём разница между ошибками 500, 502 и 504?
Как предотвратить повторение ошибки 500 после исправления?

Полезное

Найдите детали ошибки в логах сервера
Проверьте недавние изменения в коде или конфигурации
Убедитесь в правильности прав доступа к файлам
Проверьте и увеличьте лимиты ресурсов
Отключите плагины/модули для поиска конфликта
Проверьте корректность конфигурационных файлов

Эта статья помогла вам решить проблему?