Насколько вероятно, что вы порекомендуете FirstVDS своим друзьям?
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
×
ВЫ ПОСТАВИЛИ НАМ 8 ИЗ 10
×

Что делать, если сайт недоступен (код 200)

Если сайт внезапно перестал работать, диагностировать и устранить проблему поможет этот небольшой чек-лист.

Вначале рассмотрим основные проблемы на стороне сервера.

Место на диске

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

Если есть доступ к серверу по SSH, то достаточно запустить команды:

df -i

df -h

Они покажут, сколько места занято на диске в процентах. Если занято 100%, то службы сервера, например, mysql, не смогут создавать временные файлы и сайты перестанут работать. В этом случае необходимо освободить место на диске, либо увеличить его. Более подробно в этой статье:

Что делать, когда осталось мало места на диске

Доступность служб

Как правило, для работы сайтов необходимо, чтобы был запущен веб-сервер и сервер БД mysql. Проверить статус служб можно через отдельный пункт ISPmanager:

Раздел «Службы» в ISPmanager

Если с какой-то из служб возникла проблема, то «лампочка» не включится, и тогда необходимо будет разбираться с этой службой отдельно. Так же, в большинстве случаев, об этом скажет главная страница сайта: либо отображается код ошибки, например, 500, 502, 504, либо непосредственно сам текст с отладочной информацией, если это позволяют настройки CMS, движка, на котором написан сайт.

Мы рассмотрели настройки со стороны сервера — если всё корректно по диагностике из предыдущих пунктов, но сайт по-прежнему не работает, то необходимо сужать круг поиска возможных причин ошибок и провести диагностику сайта.

Рассмотрим вариант дальнейших действий, если на сервере установлена панель управления ISPmanager.

Просмотр логов

Первым делом следует проверить:

  • не вносились ли изменения в код сайта,
  • не обновлялась ли CMS и плагины,
  • не была ли изменена версия PHP,
  • имеются ли резервные копии, на случай, если сайт не получится «реанимировать».

В последующей диагностике нам помогут логи. Если вы используете панель ISPmanager, то первым делом необходимо убедиться, включен ли лог ошибок.

WWW-домены — нужный домен — изменить:

Настройка WWW-домена в ISPmanager

Выводимые сайтом ошибки можно посмотреть по пути

/var/www/http-logs/имя-сайта.error.log

например, запустив команду tail, подключившись к серверу по SSH:

Вывод логов сайта с помощью tail

Необходимо убедиться, что нужные параметры PHP для выявления ошибки, такие как:

error_reporting

display_errors

display_startup_errors 

log_errors 

включены.

Проверить это можно в том же ISPmanager во вкладке:

Настройки web-сервераPHPНастройка, выделив нужную версию. 

Настройки PHP в ISPmanager

Либо можно добавить их непосредственно в код сайта — в главную (индексную) страницу 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 не может соединиться с базой данных, он выведет такое сообщение:

Ошибка соединения с базой данных 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:

Неправильная версия PHP в 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:

Настройки web-сервераPHPРасширения

Расширения PHP в ISPmanager

Посмотреть текущую версию PHP можно через меню WWW-домены в строке с нужным сайтом:

Версии PHP в разделе «WWW-домены»

Либо подложить файл info.php c содержимым в корень сайта:

<?php

phpinfo();

?>

затем перейти по адресу в браузере http://вашсайт.рф/phpinfo.php — в верхней части страницы увидете, какая версия используется сайтом:

Вывод файла info.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 — адрес интерпретатора PHP
  • index.php — путь к вызываемому файлу.

По истории вызовов можно будет понять, к каким файлам идёт обращение и в какой момент возникает ошибка.

Заключение

В этой статье мы рассмотрели вероятные причины, почему может не работать сайт: из-за проблем «внутри» сервера — закончившихся ресурсов или неработающих служб. Разобрались, как включать логи, настраивать PHP и включать дебаг для выявления ошибок.

Если ничего не помогло, то рекомендуем не мучаться и не заниматься «самолечением» — обратитесь в техническую поддержку хостинга или к разработчику. Как правило, так получится решить проблему гораздо быстрее и без фатальных последствий.

Как правильно написать запрос в службу технической поддержки