Если сайт внезапно перестал работать, диагностировать и устранить проблему поможет этот небольшой чек-лист.
Вначале рассмотрим основные проблемы на стороне сервера.
Место на диске
Это одна из самых популярных причин в остановке сервисов. Место может заполнится логами, бэкапами, если они сохраняются локально, кэшем сайта.
Если есть доступ к серверу по SSH, то достаточно запустить команды:
df -i df -h
Они покажут, сколько места занято на диске в процентах. Если занято 100%, то службы сервера, например, mysql
,
не смогут создавать временные файлы и сайты перестанут работать. В этом
случае необходимо освободить место на диске, либо увеличить его. Более
подробно в этой статье:
Что делать, когда осталось мало места на диске
Доступность служб
Как правило, для работы сайтов необходимо, чтобы был запущен веб-сервер и сервер БД mysql
. Проверить статус служб можно через отдельный пункт ISPmanager:
Если с какой-то из служб возникла проблема, то «лампочка» не
включится, и тогда необходимо будет разбираться с этой службой отдельно.
Так же, в большинстве случаев, об этом скажет главная страница сайта:
либо отображается код ошибки, например, 500
, 502
, 504
, либо непосредственно сам текст с отладочной информацией, если это позволяют настройки CMS, движка, на котором написан сайт.
Мы рассмотрели настройки со стороны сервера — если всё корректно по диагностике из предыдущих пунктов, но сайт по-прежнему не работает, то необходимо сужать круг поиска возможных причин ошибок и провести диагностику сайта.
Рассмотрим вариант дальнейших действий, если на сервере установлена панель управления ISPmanager.
Просмотр логов
Первым делом следует проверить:
- не вносились ли изменения в код сайта,
- не обновлялась ли CMS и плагины,
- не была ли изменена версия PHP,
- имеются ли резервные копии, на случай, если сайт не получится «реанимировать».
В последующей диагностике нам помогут логи. Если вы используете панель ISPmanager, то первым делом необходимо убедиться, включен ли лог ошибок.
Сайты
— нужный домен — изменить:
Выводимые сайтом ошибки можно посмотреть по пути
/var/www/http-logs/имя-сайта.error.log
например, запустив команду tail
, подключившись к серверу по SSH:
Необходимо убедиться, что нужные параметры PHP для выявления ошибки, такие как:
error_reporting display_errors display_startup_errors log_errors
включены.
Проверить это можно в том же ISPmanager во вкладке:
Настройки
— Настройки PHP
— Расширенные настройки
, выделив нужную версию.
Либо можно добавить их непосредственно в код сайта — в главную (индексную) страницу index.php
:
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
Либо прописать в файл .htaccess
в корне сайта:
php_flag display_startup_errors on php_flag display_errors on
Тем самым, мы включили возможность вывода ошибок и логирование со стороны PHP и в большинстве случаев сообщений в логе будет достаточно, чтобы понять, в какую сторону «копать». Но бывает, что и этого мало, тогда необходимо идти дальше и включать вывод диагностической информации уже непосредственно внутри самого сайта, средствами его движка.
Включение вывода ошибок и debug
Большинство CMS поддерживают вывод отладочной информации на экран, что поможет в диагностике ошибок.
Например, если Wordpress не может соединиться с базой данных, он выведет такое сообщение:
Если же при этом в конфигурационном файле wp-config.php
, который находится в корне сайта, включить дебаг — поменять директивы:
define('WP_DEBUG', false); define('WP_DEBUG', true);
то выводимая информация будет полнее:
И в этом примере выводимый текст достаточно ясно даёт понять, что указан неправильный пароль пользователя базы данных.
Подобный способ отладки применим для большинства CMS: дебаг можно включить в configuration.php
у Joomla, .settings.php
(скрытый
файл с точкой перед названием) у Битрикс и так далее. Узнать, как это
сделать, может помочь документация используемого движка.
Увы, в одной статье не охватить все возможные проблемы, влияющие на доступность сайта. Поэтому мы рассмотрим только самые распространенные случаи, с которыми чаще всего приходится иметь дело техподдержке.
Совместимость версий PHP
Одна из частых проблем — сайт работает на одной версии PHP, а на сервере используется другая. Несовместимость версий приводит к некорректной работе сайта. Если дело в этом, вы увидите синтаксические ошибки вида:
Parse error: syntax error, unexpected T_STRING
Либо явное сообщение, как например это делает Wordpress:
Другая распространенная ошибка:
Extension ‘mysql’ is deprecated since PHP 5.5 and removed since PHP 7.0; Use mysqli instead
Говорит о том, что вы пытаетесь запустить сайт на версии 7.0 и выше,
когда он работает с более ранними версиями PHP и использует устаревшее
расширение php-mysql
, когда как в новых версиях используется только php-mysqli
.
Отсутствие расширений PHP
Также могут отсутствовать необходимые для работы сайта расширения PHP. Пример текста ошибки:
Ioncube Loader is NOT installed at your server to run this application
или
Uncaught Error: Call to undefined function curl_init()
Это говорит об отсутствующих или выключенных расширениях PHP Ioncube
или Curl
соответственно.
Проверить их наличие можно через меню ISPmanager:
Настройки
— Настройки PHP
— Управление расширениями
Посмотреть текущую версию PHP можно через меню Сайты
в строке с нужным сайтом:
Либо подложить файл info.php
c содержимым в корень сайта:
<?php phpinfo(); ?>
затем перейти по адресу в браузере http://вашсайт.рф/phpinfo.php
— в верхней части страницы увидете, какая версия используется сайтом:
После работ важно удалить этот файл, так как этой информацией могут воспользоваться злоумышленники.
Лимиты PHP
Другой «пласт» возможных ошибок — недостаточные лимиты, выставленные в настройках PHP. Это может проявляться как на главной странице, так и на других, где например, работает «тяжелый» скрипт, требующий больше времени и ресурсов, чем ему дозволено сейчас.
Об этом скажут сообщения:
PHP Fatal error: Allowed memory size of 8388608 bytes exhausted
В этом случае необходимо увеличить параметр на лимит используемой ОЗУ для одного скрипта memory_limit
.
The process *** exceeded the timeout of 60 seconds или PHP EXECUTION TIMEOUT ERROR
Увеличиваем время ( в секундах), поменяв параметры set_time_limit
и max_execution_time
.
The uploaded file exceeds the upload_max_filesize directive in php.ini
Правим директивы на размер загружаемых файлов в мегабайтах: upload_max_filesize
и post_max_size
.
Используем strace
Если способы, перечисленные выше, не помогли, можно попробовать использовать утилиту strace
.
Но будьте готовы к тому, что вам потребуется подключаться к серверу по
SSH и потратить значительное время на поиск ошибок в логах — вывод этой
команды не очень удобен для восприятия.
Утилита предназначена для вывода на экран или в отдельный файл системных вызовов. Грубо говоря, показывает последовательность обращений скриптов сайта друг к другу. Это помогает отловить ошибку, если выводимого дебага недостаточно или не помогает решить проблему.
Устанавливается она yum install strace
на серверах Centos или apt install strace
для Debian/Ubuntu.
В общем виде подойдет такой синтаксис:
strace -s999 -o /tmp/strace.txt /opt/php71/php index.php
Где:
strace -s999
— вызов командыstrace
с максимально подробным выводом и запись его в файл/tmp/strace.txt
/opt/php71/php
— адрес интерпретатора PHPindex.php
— путь к вызываемому файлу.
По истории вызовов можно будет понять, к каким файлам идёт обращение и в какой момент возникает ошибка.
Заключение
В этой статье мы рассмотрели вероятные причины, почему может не работать сайт: из-за проблем «внутри» сервера — закончившихся ресурсов или неработающих служб. Разобрались, как включать логи, настраивать PHP и включать дебаг для выявления ошибок.
Если ничего не помогло, то рекомендуем не мучаться и не заниматься «самолечением» — обратитесь в техническую поддержку хостинга или к разработчику. Как правило, так получится решить проблему гораздо быстрее и без фатальных последствий.