Что делать, если сайт недоступен (код 200)
Если сайт внезапно перестал работать, диагностировать и устранить проблему поможет этот небольшой чек-лист.
Вначале рассмотрим основные проблемы на стороне сервера.
Место на диске
Это одна из самых популярных причин в остановке сервисов. Место может заполнится логами, бэкапами, если они сохраняются локально, кэшем сайта.
Если есть доступ к серверу по SSH, то достаточно запустить команды:
Они покажут, сколько места занято на диске в процентах. Если занято 100%, то службы сервера, например, mysql , не смогут создавать временные файлы и сайты перестанут работать. В этом случае необходимо освободить место на диске, либо увеличить его. Более подробно в этой статье:
Что делать, когда осталось мало места на дискеДоступность служб
Как правило, для работы сайтов необходимо, чтобы был запущен веб-сервер и сервер БД mysql . Проверить статус служб можно через отдельный пункт ISPmanager:
Раздел «Службы» в ISPmanager
Если с какой-то из служб возникла проблема, то «лампочка» не включится, и тогда необходимо будет разбираться с этой службой отдельно. Так же, в большинстве случаев, об этом скажет главная страница сайта: либо отображается код ошибки, например, 500 , 502 , 504 , либо непосредственно сам текст с отладочной информацией, если это позволяют настройки CMS, движка, на котором написан сайт.
Мы рассмотрели настройки со стороны сервера — если всё корректно по диагностике из предыдущих пунктов, но сайт по-прежнему не работает, то необходимо сужать круг поиска возможных причин ошибок и провести диагностику сайта.
Рассмотрим вариант дальнейших действий, если на сервере установлена панель управления ISPmanager.
Просмотр логов
Первым делом следует проверить:
- не вносились ли изменения в код сайта,
- не обновлялась ли CMS и плагины,
- не была ли изменена версия PHP,
- имеются ли резервные копии, на случай, если сайт не получится «реанимировать».
В последующей диагностике нам помогут логи. Если вы используете панель ISPmanager, то первым делом необходимо убедиться, включен ли лог ошибок.
WWW-домены — нужный домен — изменить:
Настройка WWW-домена в ISPmanager
Выводимые сайтом ошибки можно посмотреть по пути
например, запустив команду tail , подключившись к серверу по SSH:
Вывод логов сайта с помощью tail
Необходимо убедиться, что нужные параметры PHP для выявления ошибки, такие как:
Проверить это можно в том же ISPmanager во вкладке:
Настройки web-сервера — PHP — Расширенные настройки , выделив нужную версию.
Настройки PHP в ISPmanager
Либо можно добавить их непосредственно в код сайта — в главную (индексную) страницу index.php :
Либо прописать в файл .htaccess в корне сайта:
Тем самым, мы включили возможность вывода ошибок и логирование со стороны PHP и в большинстве случаев сообщений в логе будет достаточно, чтобы понять, в какую сторону «копать». Но бывает, что и этого мало, тогда необходимо идти дальше и включать вывод диагностической информации уже непосредственно внутри самого сайта, средствами его движка.
Включение вывода ошибок и debug
Большинство CMS поддерживают вывод отладочной информации на экран, что поможет в диагностике ошибок.
Например, если Wordpress не может соединиться с базой данных, он выведет такое сообщение:
Ошибка соединения с базой данных WordPress
Если же при этом в конфигурационном файле wp-config.php , который находится в корне сайта, включить дебаг — поменять директивы:
то выводимая информация будет полнее:
Подробный вывод ошибки соединения с БД
И в этом примере выводимый текст достаточно ясно даёт понять, что указан неправильный пароль пользователя базы данных.
Подобный способ отладки применим для большинства CMS: дебаг можно включить в configuration.php у Joomla, .settings.php (скрытый файл с точкой перед названием) у Битрикс и так далее. Узнать, как это сделать, может помочь документация используемого движка.
Увы, в одной статье не охватить все возможные проблемы, влияющие на доступность сайта. Поэтому мы рассмотрим только самые распространенные случаи, с которыми чаще всего приходится иметь дело техподдержке.
Совместимость версий PHP
Одна из частых проблем — сайт работает на одной версии PHP, а на сервере используется другая. Несовместимость версий приводит к некорректной работе сайта. Если дело в этом, вы увидите синтаксические ошибки вида:
Либо явное сообщение, как например это делает Wordpress:
Неправильная версия PHP в WordPress
Другая распространенная ошибка:
Говорит о том, что вы пытаетесь запустить сайт на версии 7.0 и выше, когда он работает с более ранними версиями PHP и использует устаревшее расширение php-mysql , когда как в новых версиях используется только php-mysqli .
Отсутствие расширений PHP
Также могут отсутствовать необходимые для работы сайта расширения PHP. Пример текста ошибки:
Это говорит об отсутствующих или выключенных расширениях PHP Ioncube или Curl соответственно.
Проверить их наличие можно через меню ISPmanager:
Настройки web-сервера — PHP — Управление расширениями
Расширения PHP в ISPmanager
Посмотреть текущую версию PHP можно через меню WWW-домены в строке с нужным сайтом:
Версии PHP в разделе «WWW-домены»
Либо подложить файл info.php c содержимым в корень сайта:
затем перейти по адресу в браузере http://вашсайт.рф/phpinfo.php — в верхней части страницы увидете, какая версия используется сайтом:
Вывод файла info.php
После работ важно удалить этот файл, так как этой информацией могут воспользоваться злоумышленники.
Лимиты PHP
Другой «пласт» возможных ошибок — недостаточные лимиты, выставленные в настройках PHP. Это может проявляться как на главной странице, так и на других, где например, работает «тяжелый» скрипт, требующий больше времени и ресурсов, чем ему дозволено сейчас.
Об этом скажут сообщения:
В этом случае необходимо увеличить параметр на лимит используемой ОЗУ для одного скрипта memory_limit .
Увеличиваем время ( в секундах), поменяв параметры set_time_limit и max_execution_time .
Правим директивы на размер загружаемых файлов в мегабайтах: upload_max_filesize и post_max_size .
Используем strace
Если способы, перечисленные выше, не помогли, можно попробовать использовать утилиту strace . Но будьте готовы к тому, что вам потребуется подключаться к серверу по SSH и потратить значительное время на поиск ошибок в логах — вывод этой команды не очень удобен для восприятия.
Утилита предназначена для вывода на экран или в отдельный файл системных вызовов. Грубо говоря, показывает последовательность обращений скриптов сайта друг к другу. Это помогает отловить ошибку, если выводимого дебага недостаточно или не помогает решить проблему.
Устанавливается она yum install strace на серверах Centos или apt install strace для Debian/Ubuntu.
В общем виде подойдет такой синтаксис:
- strace -s999 — вызов команды strace с максимально подробным выводом и запись его в файл /tmp/strace.txt
- /opt/php71/php — адрес интерпретатора PHP
- index.php — путь к вызываемому файлу.
По истории вызовов можно будет понять, к каким файлам идёт обращение и в какой момент возникает ошибка.
Заключение
В этой статье мы рассмотрели вероятные причины, почему может не работать сайт: из-за проблем «внутри» сервера — закончившихся ресурсов или неработающих служб. Разобрались, как включать логи, настраивать PHP и включать дебаг для выявления ошибок.
Если ничего не помогло, то рекомендуем не мучаться и не заниматься «самолечением» — обратитесь в техническую поддержку хостинга или к разработчику. Как правило, так получится решить проблему гораздо быстрее и без фатальных последствий.