Рано или поздно любой разработчик, размещающий сайты клиентов на удаленном хостинге получает предупреждение от хостинга примерно следующего содержания.
«Здравствуйте!
Ваш аккаунт производит недопустимую в рамках вашего тарифа нагрузку на сервер.
Для того, чтобы просмотреть/проанализировать нагрузку, создаваемую Вашим аккаунтом,
авторизуйтесь в панели управления хостингом 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;
- нажать Настройки сайта;
- в разделе Скорость сканирования указать нужное значение.
Надеюсь, статья помогла Вам!
Я еще неоднократно вернусь к теме безопасности. Впереди будем рассматривать более серьезные случаи: вирусы на сайте, которые тоже создают нагрузку.
7 Responses
Мой сайт раза по два в неделю испытывает нагрузку. По логам видно, что долбятся с разных IP-адресов. Есть плагины защиты от взлома? Какие можете посоветовать?
Здравствуйте. Плагинов защиты сайта на Worrdpress множество. Я могу посоветовать те, которые протестировал сам и которые показали хороший результат. В первую очередь, это iThemes Security и Wordfence Security. Если Ваш сайт небольшой, то будет достаточно бесплатной версии любого их этих плагинов. Премиум-версии с дополнительными возможностями Вы можете скачать на этом сайте по ссылке.
Добрый день! Спасибо за полезную статью!
Антон, у меня к Вам такой вопрос.
На мой сайт возросла нагрузка, но посещаемость не большая(убрал рекламу).
Проанализировал логи и у меня есть обращения к сайту от Gecko/20100101 и их довольно много. Так же много обращений от Gecko/********* различные комбинации цифр.
Все сделал, как Вы описали, чтобы убрать эти обращения. Но сегодня смотрю логи, а обращения от Gecko/20100101 продолжаются. Подскажите почему так?
Здравствуйте, Михаил. Уточните, какой ответ выдает сервер этому user-agent при обращении?
157.55.39.41 — — [24/Nov/2018:02:05:11 +0300] «GET /robots.txt HTTP/1.0» 403 212 «-» «Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)» ivebs.ru
Пример: для заблокированного мною агента bingbot при его обращении к файлу robots.txt выдается ответ 403. Это означает, что сервер заблокировал бота и выдал ему ошибку. Это то, чего мы добивались: 403 ошибка не создает нагрузку на сервер. Если ответ сервера 200, тогда блокировка не действует, значит что-то сделано некорректно.
Добрый день Антон!
Спасибо за ответ.
Вот что выдает сервер: 185.162.234.54 — — [25/Nov/2018:02:01:22 +0300] «GET /bancode.php?id=33 HTTP/1.0» 301 245 «http://www.stenochka.xn--h1adkdeeq.xn--p1acf/index.html» «Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0» adsmetod.ru
А вот так я прописал в файле .htaccess:
SetEnvIfNoCase User-Agent » Gecko/20100101″ bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot
301 ошибка, выдаваемая юзеру, также свидетельствует о том, что он не достучался до адреса. Хотя она обозначает, что адрес попросту изменился. Есть ли где-то код 200, означающий, что юзер получил доступ к странице? Если нет, то поводов для беспокойства быть не должно.
В целом же, проверьте, чтобы вставленный в .htaccess код был такого вида (т.к. при вставке на сайт кавычки иногда отображаются некорректно):
Спасибо Антон!