Разбираемся, что означает ошибка 500, из-за чего она может возникнуть и что делать, чтобы убрать её с сайта.
Что внутри
- Что значит ошибка сервера 500
- Как может выглядеть ошибка 500
- Почему возникает ошибка 500
- Как 500 ошибка влияет на SEO
- Как устранить ошибку 500
Что такое ошибка 500
Ошибка 500 Internal Server Error — это код состояния HTTP, один из стандартных ответов сервера на запрос браузера. Примеры других кодов HTTP: 403 Forbidden, 404 Not Found или 503 Service Unavailable.
Сервер отправляет один из таких кодов каждый раз, когда в браузере открывают новую страницу или переходят по ссылке. Даже когда никакой ошибки не было и страница нормально загрузилась.
Конкретно этот код HTTP — 500 Internal Server Error — означает, что сервер не смог выполнить запрос из-за непредвиденной ошибки.
Как может выглядеть ошибка 500
Дизайн страницы с 500 ошибкой будет отличаться в зависимости от разных факторов: вашего браузера, веб-сервера, панели управления хостингом, операционной системы, а также движка или фреймворка, на котором работает сайт.
Например, вот так выглядят стандартные страницы 500 ошибки четырёх популярных веб-серверов: Apache, Nginx, LiteSpeed и IIS 7.
Когда что-то не так с параметрами PHP или правами на файлы и папки, в Google Chrome 500 ошибка будет оформлена в фирменном стиле браузера, а в Firefox будет пустая страница — «белый экран смерти».
Когда на сайте с WordPress есть проблема со скриптом — написан с ошибкой или в нём пропущен символ — тоже возникнет ошибка 500:
Также страницу с 500 ошибкой иногда оформляют в общем дизайне сайта. Вот так, например, выглядит страница с такой ошибкой на сайте YouTube:
Это не все варианты, а только самые популярные. В зависимости от того, какое ПО вы используете, оформление страницы с ошибкой может быть и другим.
Текст на странице тоже может отличаться. Вот некоторые варианты, с которыми вы можете столкнуться:
- 500 Error
- HTTP Error 500
- Internal Server Error
- 500 Ошибка сервера
- HTTP 500 – Internal Server Error
- 500 Ошибка в настройках сайта
- 500 Внутренняя ошибка сервера
- The website cannot display the page
- Error establishing a database connection
- Error: Request failed with status code 500
- На сайте возникла критическая ошибка.
- The site is experiencing technical difficulties.
- There has been a critical error on your website.
- 500 Internal Server Error. Sorry something went wrong.
- 500. That’s an error. There was an error. Please try again later. That’s all we know.
Почему возникает ошибка 500
Как вы уже поняли, ошибка 500 — это собирательное сообщение, которое возникает, когда что-то не сработало, как ожидалось. Такой обобщённый ответ используют, потому что заставить сервер сломаться могут тысячи разных вещей и невозможно предусмотреть отдельную страницу для каждого случая.
Проще всего посмотреть в логи сервера, чтобы найти причину возникновения 500 ошибки. Но вообще, вот несколько распространенных ситуаций, в которых она возникает:
- ошибка в скрипте PHP;
- проблемы с базой данных;
- неправильные параметры PHP;
- неправильные права доступа к папкам и файлам;
- сайт вступает в конфликт с шаблоном или расширением;
- отсутствует или повреждён системный файл движка сайта;
- ошибка в глобальном конфигурационном файле веб-сервера;
- ошибка в дополнительном конфигурационном файле веб-сервера .htaccess;
- в одном из файлов есть ссылка на другой файл, но сам файл отсутствует;
- скрипт не выполняется из-за слишком низких значений max_execution_time и memory_limit.
Как 500 ошибка влияет на SEO
Если на сайте возникла 500 ошибка, важно исправить её как можно быстрее, потому что из-за неё страницы могут исчезнуть из результатов поиска.
Когда поисковый робот заходит на страницу и видит 500 ошибку, он пробует зайти на страницу ещё раз в пределах суток, рассчитывая на то, что владелец сайта решит проблему. Но если при повторном посещении снова будет код ответа сервера 500, бот уже может исключить страницу из индекса.
Проверить, выпала ли страница из индекса, можно в Google Search Console. Для этого войдите в консоль, введите в строке поиска URL страницы и нажмите Enter. Сервис проверит страницу и покажет её статус. Если страницы уже нет в индексе, нажмите «Запросить индексирование», чтобы повторно её туда добавить.
Также Search Console поможет вам своевременно обнаруживать ошибки. Для этого просто периодически проверяйте раздел «Покрытие» на главной странице панели в меню слева. В него будут записываться все ошибки на сайте.
Подробнее на эту тему:
Как добавить сайт в Google Search Console
Как исправить ошибку 500
Если вы столкнулись с ошибкой как посетитель, ваша единственная опция описана в первом совете. Для остальных советов понадобится доступ на хостинг.
Советы в этом разделе описывают не все ситуации, из-за которых может возникнуть 500 ошибка, а только наиболее популярные. Если ничего из перечисленного выше не поможет, в конце статьи есть рекомендация, что делать.
1. Очистите кэш и обновите страницу
Бывает, 500 ошибка возникает в моменте и пропадает при повторной загрузке страницы. При этом иногда она кэшируется, поэтому кэш на всякий случай стоит очистить. Вот как сделать это в популярных браузерах:
У нас на YouTube-канале также есть видеоинструкция: Как очистить кэш.
2. Проверьте логи
Так вы сразу увидите причину ошибки, вместо того чтобы перебирать все возможные варианты. Если вы не сильно разбираетесь, попробуйте сначала советы ниже. А уже если ничего не сработает, придётся возвращаться к этому варианту.
В зависимости от того, какой веб-сервер используется у вас на хостинге, по умолчанию логи будут храниться по таким путям:
- /var/log/httpd/error_log или /var/log/apache2/error_log —для Apache;
- /var/log/nginx/error_log — для Nginx.
Логи могут храниться и в других местах. Например, панели управления хостингом часто меняют стандартный путь их расположения:
- /usr/local/apps/apache/logs/vashdomen.err для бесплатной панели Webuzo у нас на хостинге;
- /usr/local/apache/logs/error_log — Apache с установленной cPanel & WHM.
Важный нюанс — доступ к общим логам будет только на VPS-хостинге или выделенном сервере. На виртуальном хостинге будет свой файл error_log. По умолчанию он создаётся в той же папке, где лежит скрипт, выполнение которого привело к 500 ошибке. Но разные CMS могут переопределять путь к этому файлу в другие папки.
Плюс в этот файл попадают только ошибки PHP. Ошибки веб-сервера попадут в основные логи, к которым не будет доступа. Так что, если у вас виртуальный хостинг и в логах с ошибками PHP пусто, свяжитесь с поддержкой провайдера и попросите их посмотреть основные логи. Пусть пришлют последние строки оттуда.
Вы также можете включить опцию display_errors, чтобы причина ошибки из логов отображалась на сайте. В панели управления cPanel для этого нужно найти на главной странице панели раздел «Программное обеспечение» и открыть приложение «Выбор версии PHP».
Дальше перейдите на вкладку «Настройки» и поставьте галочку в строке «display_errors». Изменения сохранятся автоматически.
На VPS или выделенном сервере добавьте такую директиву в основной файл php.ini:
display_errors = on
После этого текст из логов будет выводиться на экран. Сначала в нём будет причина ошибки, а потом её объяснение. Например, путь к файлу с номером строки, на которой эта ошибка находится. Вот пример такого сообщения.
В этом случае 500 ошибка возникла из-за того что серверу обязательно нужно открыть файл version.php (слово «require» в самом начале), как указано на 33 строке в файле wp-settings.php, но прав для открытия этого файла нет (слова «Permission denied»).
3. Проверьте глобальные конфигурационные файлы
Если у вас виртуальный хостинг, беспокоиться не о чем. За настройку этих файлов отвечает хостинг-провайдер и вероятность возникновения ошибки из-за проблемы с этим файлом стремится к нулю.
Если у вас VPS или выделенный сервер, вы сами отвечаете за настройку этих файлов. И в этом случае 500 ошибку может вызвать случайная опечатка или конфликтующие директивы.
У веб-сервера Apache конфигурационные файлы хранятся в таких местах:
- Основной конфигурационный файл httpd.conf в каталоге /etc/httpd/conf/ либо apache.conf в каталоге /etc/apache2/conf/ (в зависимости от дистрибутива).
- Дополнительные конфигурационные файлы, в которых размещены виртуальные хосты, в каталогах /etc/httpd/conf.d/, /etc/apache2/conf.d/, /etc/apache2/sites-available/ или /etc/apache2/sites-enabled/.
У веб-сервера Nginx конфигурационные файлы хранятся в таких местах:
- Основной конфигурационный файл nginx.conf в каталоге /etc/nginx/.
- Дополнительные конфигурационные файлы, в которых размещены виртуальные хосты, в каталогах /etc/nginx/conf.d/, /etc/nginx/sites-available/ или /etc/nginx/sites-enabled/.
Если вы управляете сервером при помощи какой-то панели управления, конфигурационные файлы могут храниться в других папках. Например, для Webuzo это /usr/local/apps/apache, а для Plesk — /home/user/conf/.
4. Проверьте вспомогательный конфигурационный файл .htaccess
Этот файл будет в корневой папке домена на любом хостинге с веб-сервером Apache. Даже если вы никогда не редактировали его, в файле всё равно может быть ошибка. Например, такое бывает с сайтами на WordPress: при установке плагинов они сами добавляют нужные директивы в файл, из-за чего иногда возникают конфликты с предыдущими директивами и возникает 500 ошибка.
Чтобы проверить, действительно ли дело в .htaccess, переименуйте его на хостинге и снова зайдите на сайт. С другим названием файл не будет работать. Если ошибка пропадёт, проблема именно в файле. Остаётся только найти директиву, которая вызывает ошибку. Для этого добавьте знак решетки в начале каждой строки директивы:
#RewriteEngine On
#RewriteCond %{HTTP_HOST} !^www\.
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Читайте подробнее на эту тему:
5. Проверьте права доступа к папкам и файлам
Ошибка 500 Internal Server Error часто возникает, потому что у веб-сервера нет доступа к какой-то папке или файлу, из-за чего он не может выполнить скрипт. Дело может быть в том, что у файла или папки в принципе нерабочие права, а может в том, что файлом или папкой владеет один пользователь, а веб-сервер выполняет процессы от имени другого; у владельца права есть, а у веб-сервера нет.
Изменить владельца можно в командной строке при помощи команды chown:
chown пользователь:группа /путь/к/папке-или-файлу
Изменить права можно либо при помощи FTP-клиента вроде FileZilla, если вы таким пользуетесь, либо при помощи менеджера файлов в панели управления хостингом. Вот как сделать это в cPanel.
На главной странице панели найдите блок «Файлы» и перейдите в раздел «Менеджер файлов».
Выделите нужный файл или папку и нажмите в верхней панели кнопку «Права». Вот стандартные значения, с которыми всё должно работать:
- для каталогов — 755;
- для файлов — 644.
Если привыкли работать с файлами в командной строке, вот команда, которая поможет изменить права:
chmod [права] /путь/к/папке
Читайте подробнее на эту тему:
Права доступа к папкам и файлам на хостинге
6. Проверьте базу данных
Ошибка Internal Server Error ещё возникает, когда сервер не может подключиться к базе данных. Текст ошибки в этом случае будет «Error establishing a database connection», но в логах будет код ошибки 500.
Чаще всего сервер не может подключиться к базе данных из-за того, что в файле с деталями базы указан неправильный логин или пароль. Такое может произойти, если вы или ваш программист поменяли детали, но случайно забыли обновить их в файле. Расположен этот файл обычно в корневой папке сайта и в его названии есть слово config. Например, для сайтов на WordPress это wp-config.php, а для сайтов на OpenCart — config.php.
Также дело может быть в том, что MySQL-сервер перегружен из-за большого количества посетителей. Такое часто бывает на виртуальном хостинге, где для каждого пользователя ограничено количество одновременных подключений к базе.
Запросов к базе данных может стать больше по мере естественного роста трафика на сайт. Это обычно значит, что нужен более мощный хостинг. Либо запросы могут быть вредоносными и тогда нужно просто от них отбиться. Проверить нагрузку можно при помощи команд SHOW GLOBAL STATUS, VMSTAT или TOP. Если не разбираетесь, обратитесь за помощью к разработчику сайта или поддержке вашего хостинг-провайдера.
Ещё ошибку Error establishing a database connection может вызвать повреждение в базе данных. По мере того как вы наполняете свой сайт контентом, устанавливаете темы и плагины, оптимизируете при помощи разных инструментов, что-то важное может случайно удалиться, из-за чего база и перестанет работать. В этом случае решением будет восстановить резервную копию, если она есть.
7. Проверьте использование ресурсов на сервере
Любое действие на сайте запускает на сервере процесс. Если их будет слишком много и все ресурсы окажутся заняты, начнёт образовываться очередь. Может выйти так, что очередь станет слишком длинной и новые процессы станут вытеснять старые. В результате какой-то важный процесс может не выполниться и возникнет 500 ошибка.
Если у вас виртуальный хостинг, вы не можете управлять процессами — это задача провайдера. Но, возможно, сможете оценить загруженность сервера в своей панели управления. В cPanel это можно сделать в блоке «Статистика» на главной странице панели справа:
При полной загруженности сервера вы можете связаться с провайдером и попросить их завершить некоторые процессы. Но на таком хостинге они обычно связываются с клиентами сами, когда замечают у них много тяжелых процессов, поскольку это может влиять на работу других сайтов на сервере.
Если у вас VPS или выделенный сервер, вы сами управляете процессами. Их можно посмотреть при помощи команды top, и при необходимости завершить некоторые из них, используя команду:
kill -TERM [PID]
В этой команде «PID» — это номер процесса, который вы получили с помощью команды top, а «kill -TERM» — безопасный метод завершения зависшего процесса.
Завершить процесс — это временная мера. В будущем их опять может стать слишком много и снова появится 500 ошибка. Чтобы решить проблему, вам понадобится либо переходить на более мощный тариф, либо оптимизировать сайт. Например, отключить ненужный функционал, исправить скрипты или переделать запросы к базе данных.
Если покупали хостинг у нас, напишите нам письмо с деталями вашего хостинга и описанием проблемы. Наши специалисты взглянут на процессы и подскажут, что можно сделать.
8. Проверьте параметры PHP max_execution_time и memory_limit
Эти параметры регулируют поведение сервера при обработке PHP скриптов, чтобы он не зависал и не тратил на обработку все ресурсы. Параметр max_execution_time — это время в секундах, в течение которого скрипт должен выполниться. А memory_limit — это количество памяти PHP, которое сервер может выделить для выполнения скрипта.
Стартовых значений этих параметров может не хватать, чтобы сервер выполнил важные скрипты, из-за чего он будет вынужден отправить браузеру 500 ошибку.
Один из способов увеличить значения этих параметров — в панели управления хостингом. В cPanel для этого нужно найти на главной странице панели раздел «Программное обеспечение» и открыть приложение «Выбор версии PHP».
Дальше перейдите на вкладку «Настройки», найдите указанные параметры и увеличьте их значения. Настройки сохраняются автоматически.
Отдельный момент — при смене версии PHP индивидуальные значения параметров memory_limit и max_execution_time возвращаются к значениям по умолчанию. Так что придётся увеличивать их заново.
9. Проверьте PHP-скрипты на ошибки
Самые распространённые ошибки — это опечатки: пропущена буква, точка с запятой или скобка. Также может быть такое, что в скрипте стоит ссылка на файл, но самого файла по указанному пути нет. В результате сервер не может выполнить скрипт и показывает в браузере 500 ошибку.
Ещё одна причина — несовместимость скрипта с новой версией PHP. Разные версии отличаются друг от друга, поэтому скрипт, который работал с PHP 5.6, может уже не работать с PHP 7.2. Например, потому что в новой версии больше не поддерживается какая-то переменная. Также после смены версии PHP некоторые расширения могут быть выключены по-умолчанию или отсутствовать как устаревшие.
10. Проверьте плагины и тему
Любой плагин или тема это чей-то код, который вы встраиваете в свой сайт. Если этот код написан плохо или после его добавления он вступает в конфликт с другим кодом, на сервере может возникнуть 500 ошибка. Иногда она возникает сразу после установки или обновления и на всех страницах сайта, но может и возникать после выполнения какого-то действия или только на одной странице.
Чтобы проверить, дело в плагине или нет, деактивируйте их и проверьте, исчезла ли ошибка. Если да, включайте плагины по очереди, пока не найдёте тот, из-за которого она возникает. Если нет, значит дело в чём-то другом.
Подобным образом можно проверить и тему — включите вместо текущей стандартную и снова зайдите на сайт. Дальше по ситуации: либо ищите проблему дальше, либо меняйте тему, либо свяжитесь с разработчиком, чтобы помог устранить ошибку.
Отключить плагины можно в консоли WordPress, в разделе «Плагины» – «Установленные. Поставьте галочку в шапке таблицы, чтобы выбрать все плагины сразу, выберите в выпадающем меню выше вариант «Деактивировать» и нажмите «Применить».
Если не можете попасть в консоль, потому что 500 ошибка отображается на всех страницах сайта, отключить плагины можно в менеджере файлов в панели управления хостингом. Вот как это сделать в cPanel.
На главной странице cPanel найдите блок «Файлы» и перейдите в раздел «Менеджер файлов».
Дальше найдите корневую папку домена, перейдите в папку wp-content и переименуйте папку plugins, например, в plugins-old. Это отключит все плагины.
Обычно для основного домена корневая папка называется public_html, а для дополнительного — так же, как и сам домен.
Если после этого 500 ошибка исчезла, переименуйте папку plugins обратно, зайдите в неё и по очереди переименовывайте папку с каждым плагином, пока не найдёте тот, который вызывает ошибку.
11. Обратитесь к хостинг-провайдеру
500 ошибка может возникать, если провайдер проводит на сервере технические работы. Поэтому уточните этот момент у поддержки, если не получается найти причину ошибки самостоятельно.
Многие провайдеры информируют клиентов о подобных работах. У нас для этого есть отдельная страница «Сервисные уведомления». Вы найдёте её в боковой панели своего аккаунта.
Что делать, если советы не помогли
К сожалению, такое тоже может произойти. Ошибка 500 очень индивидуальна и рассмотреть все ситуации в статье невозможно. Попробуйте погуглить фрагмент ошибки, возможно, у кого-то была такая же проблема и её решение описали на каком-нибудь форуме. Либо пришлите в комментариях к этой статье сообщение из логов, постараемся помочь.
Если покупали хостинг у нас, пишите с этим вопросом сразу в чат или на почту support@hostiq.ua. Так будет быстрее.