Рано или поздно любой разработчик, размещающий сайты клиентов на удаленном хостинге получает предупреждение от хостинга примерно следующего содержания.

«Здравствуйте!
Ваш аккаунт производит недопустимую в рамках вашего тарифа нагрузку на сервер.
Для того, чтобы просмотреть/проанализировать нагрузку, создаваемую Вашим аккаунтом,
авторизуйтесь в панели управления хостингом https://panel.hostland.ru.
График использования ресурсов сервера Вы можете увидеть в панели управления по ссылке:
https://panel.hostland.ru/#cpu
Или пройдя в меню по пунктам “Об аккаунте” -> “Статистика CPU”
В связи с этим, мы просим вас произвести оптимизацию сайтов, для уменьшения потребления ресурсов сервера.
В случае, если оптимизация невозможна, мы рекомендуем вам подключить дополнительную
услугу ‘Увеличенная нагрузка CPU на __ %’. Это можно сделать во вкладке ‘Услуги’ в панели управления хостингом https://panel.hostland.ru.
Так как допустимая нагрузка на Вашем тарифном плане составляет 7%,
а у Вас максимальная нагрузка составляет в среднем 14%, Вам необходимо подключить 7%.
Чтобы определить, в связи с чем происходит нагрузка на сайт, вам необходимо:
1) Проанализировать логи (access_log) они находятся в папке /domainname.ru/logs/* (и доступны по фтп) каждого вашего сайта
2) Посмотреть к какому из скриптов происходят наибольшие обращения
3) После проанализировать код скрипта/скриптов.
Также хотим обратить ваше внимание: посещаемость сайта в некоторых случаях никак не влияет на производимую нагрузку, а в некоторых влияет довольно сильно, в виду неоптимизированности скриптов сайта и его запросов к базе данных.
Всё написанное выше необходимо выполнять вам или вашему техническому специалисту, который обслуживает ваш сайт.
Если такого специалиста у вас нет, вам целесообразно его найти, так как эта работа не входит в компетенцию службы технической поддержки хостинга. Тем не менее, ваш технический специалист может рассчитывать на нашу посильную помощь.
ВАЖНО!
В случае систематического нарушения установленных ограничений по нагрузке, Ваш аккаунт может быть заблокирован.»

Это я получил сегодня утром 🙂 Начинающий разработчик может поддаться панике. Блокировка? Не оберешься проблем с клиентами! Но не стоит паниковать, все поправимо. За все время моей деятельности веб-разработчиков я получал такие предупреждения пару десятков раз — и на разу не подвергался блокировке со стороны хостера. Не потому, что игнорировал сообщения, а потому что однажды выяснив причины, уже знал, как их ликвидировать. Давайте рассмотрим, почему же может возникнуть повышенная нагрузка на хостинг и как её снизить.

1. Проверяем логи доступа к сайтам.

Для начала посмотрим статистику нагрузки.

В моем случае нагрузка создавалась в промежуток времени с 23ч до 2ч ночи.
Эта рекомендация дана в самом тексте предупреждения – и она ключ к пониманию того, что происходит на сайте.

2. Выявляем сайт, создающий нагрузку.

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

3. Находим IP, с которых идут обращения к сайту больше всего.

Логи сайта насчитывают до сотен тысяч обращений в сутки. Разумеется нам не нужно изучать каждое такое обращение. Но вы наверняка увидите огромное количество обращений с одного и того же IP-адреса. Вот вам скриншот с примером.

Средствами Notepad++ можно легко узнать количество обращений к сайту с этого. В моем случае — более 5000 обращений за час. И, если вы внимательны, то увидели, что промежуток времени как раз совпадает с графиком максимальной нагрузки на сайт.

4. Определяем user-агента.

При ddos-атаке (мои сайты подвергались и таким) количество обращений доходит до нескольких миллионов). Т.е. за 1 секунду IP обращается к вашему сайту несколько десятков раз.
В примере, который мы рассматриваем речь не идет о ddos-атаке, но этот IP явно создает нагрузку, из-за которой мы получили предупреждение.
Рассмотрим всю строку.

89.223.27.244 - - [29/Sep/2018:01:39:02 +0300] "GET /wp-content/uploads/2017/02/image.png HTTP/1.0" 200 176538 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Firefox/45.0"

Наш user-агент ‒ Gecko/20100101. Это, по сути, пользователь, который атакует наш сайт через браузер Mozilla. Замечено, что большинство массовых атак идут именно через этот браузер, вероятно, он использует определенные утилиты для масштабных обращений.
У нас 2 варианта: заблокировать IP или заблокировать user-агент.
Нужно учесть, что если мы заблокируем user-агент Gecko/20100101, то, разумеется, ни один юзер, использующий браузер Mozilla в злых целях, не сможет зайти на наш сайт. Но не смогут зайти и обычные пользователи, использующие Mozilla.
Поэтому будем блокировать IP-адрес.

5. Блокировка IP или user-агента.

Открываем файл .htaccess в корневой директории вашего сайта.
Прописываем следующее:

Всё, при следующем обращении к сайту IP 89.223.27.244 получит ошибку. До свидания. Если нужно заблокировать другие адреса, дописываем их следующей строкой Deny from…

Если нам нужно заблокировать user-агента, то поступаем следующим образом:

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

6. Когда нагрузку на хостинг создает поисковый бот yandex или goggle.

Это очень частый вариант. Да-да, поисковики, индексируя ваш сайт могут, мягко говоря, увлечься. Тут уже не добавишь поисковый робот в бан-лист, ведь тогда ваш сайт попросту перестанут находить. Что делать, если яндекс-бот «взбесился»?
Вариант 1. Через Вебмастер Яндекс входим в раздел Скорость обхода и вручную выставляем ползунок на адекватное значение.

Вариант 2. Его использую я. В файл robots.txt вписываем:
User-agent: Yandex
Crawl-delay: 2.0 # задает тайм-аут в 2 секунды

Т.е. yandex будет обращаться к вашему сайту через каждые 2 секунды. Поставьте на большее значение допустим, 20 — и робот станет открывать ваш сайт уже через каждые 20 секунд. Думаю, логика ясна.

Чтобы ограничить скорость обхода Google-ботом, нужно в констоли для вебмастеров Google:

  • выбрать свой сайт на главной странице Search Console;
  • нажать Настройки сайта;
  • в разделе Скорость сканирования указать нужное значение.

Надеюсь, статья помогла Вам!
Я еще неоднократно вернусь к теме безопасности. Впереди будем рассматривать более серьезные случаи: вирусы на сайте, которые тоже создают нагрузку.