Какие меры принять для определения и устранения причин чрезмерной нагрузки на сервер?

12 комментариев
Нагрузка на сервер

Делюсь своим опытом в статье.

1) 3 августа получил письмо службы технической поддержки ТаймВэб: 

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

2) Проверка access_logs файлов показала множество попыток доступа к сайтам:

  • а) Ботов русскоязычных YandexBot, Googlebot, bingbot
  • б) Ботов зарубежных, среди которых больше всего DotBot и Baiduspider 
  • в) Запросов к /administrator/index.php и /profil-polzovatelya?view=registration, хотя регистрация на сайте не доступна, как в настройках, так и в меню.

Решение

Приняли решение:

1) Блокировка директивой Disallow: / в файле robots.txt для следующих зарубежных ботов:

User-agent: Exabot
Disallow: /
User-agent: IDBot
Disallow: /
User-agent: Bingbot
Disallow: /
User-agent: Wotbox
Disallow: /
User-agent: Baiduspider
Disallow: /
User-agent: Baiduspider-image
Disallow: /
User-agent: Baiduspider-video
Disallow: /
User-agent: Baiduspider-news
Disallow: /
User-agent: Baiduspider-favo
Disallow: /
User-agent: Baiduspider-cpro
Disallow: /
User-agent: Baiduspider-ads
Disallow: /
User-agent: Baidu
Disallow: /
User-agent: MJ12bot
Disallow: /
User-agent: AhrefsBot
Disallow: /
User-agent: dotbot
Disallow: /
User-agent: Riddler
Disallow: /
User-agent: SemrushBot
Disallow: /
User-agent: LinkpadBot
Disallow: /
User-agent: BLEXBot
Disallow: /
User-agent: FlipboardProxy
Disallow: /
User-agent: aiHitBot
Disallow: /
User-agent: trovitBot
Disallow: /

2) Блокировка директивой user-agent в файле .htaccess для тех же ботов:

В статьях и httpd.apache.org мы не нашли описания и примеров директив блокировки ботов через файлы .htaccess сайтов.

Многозначность толкования разных источников "apache htaccess block bots" тоже не привела к результату. Мы установили в htaccess код в двух вариантах предлагаемых разными авторами:

Для одних сайтов директиву Deny from env в формате SetEnvIfNoCase User-Agent

<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase User-Agent "^dotbot" bad_bot
SetEnvIfNoCase User-Agent "^Baiduspider" bad_bot
SetEnvIfNoCase User-Agent "^anybot" bad_bot
<Limit GET POST HEAD>
Order Allow,Deny
Allow from all
Deny from env=bad_bot
</Limit>

Для других сайтов директиву RewriteCond %{HTTP_USER_AGENT} 

RewriteCond %{HTTP_USER_AGENT} Exabot [OR]
RewriteCond %{HTTP_USER_AGENT} IDBot [OR]
RewriteCond %{HTTP_USER_AGENT} Wotbox [OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider [OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider-image [OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider-video [OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider-news [OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider-favo [OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider-cpro [OR]
RewriteCond %{HTTP_USER_AGENT} Baiduspider-ads [OR]
RewriteCond %{HTTP_USER_AGENT} AhrefsBot [OR]
RewriteCond %{HTTP_USER_AGENT} MJ12bot [OR]
RewriteCond %{HTTP_USER_AGENT} Detectify [OR]
RewriteCond %{HTTP_USER_AGENT} dotbot [OR]
RewriteCond %{HTTP_USER_AGENT} Riddler [OR]
RewriteCond %{HTTP_USER_AGENT} SemrushBot [OR]
RewriteCond %{HTTP_USER_AGENT} LinkpadBot [OR]
RewriteCond %{HTTP_USER_AGENT} BLEXBot [OR]
RewriteCond %{HTTP_USER_AGENT} FlipboardProxy [OR]
RewriteCond %{HTTP_USER_AGENT} aiHitBot [OR]
RewriteCond %{HTTP_USER_AGENT} trovitBot [OR]
RewriteCond %{HTTP_USER_AGENT} Zeus
RewriteRule ^(.*)$ – [F,L] 

3) Блокировка директивой Deny from IP в файле .htaccess для явно вредных запросов к "administrator", "registration", а также IP тех же ботов, а также IP из списка злостных спамеров и хакеров, опубликованных на сайте stopforumspam.com/stats. В итоге получился список из 628 IP адресов. Привожу здесь только часть списка - злостные IP

<Limit GET POST> 
order allow,deny 
Deny from 109.86.71.72
Deny from 134.249.51.80
Deny from 146.185.223.105
Deny from 146.185.223.173
Deny from 146.185.234.81
Deny from 176.8.90.90
Deny from 178.137.161.11
Deny from 178.158.85.115
Deny from 178.159. 37.110
Deny from 178.159.37.12
Deny from 178.159.37.44
Deny from 185.154.13.7
Deny from 192.168.0.1
Deny from 193.201.224.11
Deny from 193.201.224.21
Deny from 37.115.187.206
Deny from 46.161.9.46
Deny from 46.98.212.5
Deny from 46.98.213.124
Deny from 91.200.12.59
allow from all 
</Limit>

Анализ сегодняшнего 17Aug2017 файла access_log показал от DotBot 108 сканов по IP 216.244.66.198 и 216.244.66.250 Baiduspider 7 сканов по IP 180.76.15.17. 

error_log стали содержательными, вместо 2-3 строк, теперь 40-50 строк отказа, типа:

www.site.ru [Thu Aug 17 06:11:59 2017] [error] [pid 15392] mod_access_compat.c(352): [client 216.244.66.250:48496] AH01797: client denied by server configuration: /home/g/login/site.ru/public_html/services

То есть защита наша работает, но пока работает лишь частично. Нагрузка остаётся завышенной.Нагрузка на CPU

ИТОГ

В результате наших действий нагрузка снизилась вдвое прежней, но мы ведём поиск оптимизации доступа.

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

Комментарии

Asylum +95
21 авг в 2017
Вы забыли упомянуть про кэширование. В этом случае страница выдается из файла и нет обращения к базе, также не затрачивается время и ресурсы сервера на генерацию.
Особенно кэширование на стороне клиента
Свернуть ответы
Asylum +95
21 авг в 2017
Комментарий автора
Да, разумеется, спасибо за идею и отклик, кеширование обязательно.
Я пользуюсь опцией: "Прогрессивное кэширование"
Свернуть ответы
Asylum +95
25 авг в 2017
Могу посоветовать плагин jch optimize, позволяет объединить и минимизировать JS и CSS, уменьшить размер ХТМЛ и еще ключа плюшек
Ruslan Balkin 0
23 авг в 2017
Единственное, что может позволить перемолоть практически любой наплыв посетителей без нагрузки на сервер - кэширование статических файлов. Само кэширование сделать просто, сложнее с тем, чтобы стирать кэш в случае устаревания файлов. Для хостинга и готовой CMS только экспериментировать с плагинами или писать свой.

Для выделенного сервера я предпочитаю настраивать вручную несколько правил на nginx. Максимум был почти миллион хитов в сутки. Да, с программистско-оптимизаторской точки зрения это "читерство", зато позволяет на неоптимизированном коде серверу не падать от слэшдот/хабраэффекта/пауэрофтупичок.
Свернуть ответы
Комментарий автора
Круто, пауэрофтупичок
Alexey Zhukov +1
26 авг в 2017
Добрый день. Воспользовался советом автора публикации и разместил файл robots.txt в корневых папках своих сайтов с содержимым, которое указано в статье. Ссылка на скриншот действия волшебного элексира снижения нагрузки: https://fotki.yandex.ru/next/users/myshakhovskaya/album/552796/view/1581227
В файл я добавил ещё строчку:
User-agent: *
Crawl-delay: 10
Кстати, ещё можно отвадить краулеров и ботов от нежелательных и, в общем, не нужных для них папок сайта (надо только подумать каких именно). Примеры - в статье на википедии посвящённой файлу robots.txt и как с ним работать.
Вадим Викторович - спасибо Вам большое за ценную публикацию! Благодаря Вашей статье мне удалось снизить нагрузку на свои сайты (в денежном эквиваленте - это экономия 80 р. в месяц за увеличение лимита, всё видно на скриншоте).
Свернуть ответы
Комментарий автора
Спасибо за добрые слова, Алексей!
Alexey Zhukov +1
05 сен в 2017
Вот, обнаружил списочек web-пауков. Может кому пригодится :-)
almaden.ibm.com
abachobot
accoona-ai-agent
addsugarspiderbot
arachmo
baiduspider
becomebot
beslistbot
bimbot
bingbot
dataparksearch
dotbot
envolk[its]spider
exabot
fast enterprise crawler
fast-webcrawler
furlbot
fyberspider
galaxybot
gigabot
girafabot
googlebot
googlebot-image
holmes
ia_archiver
ichiro
igdespyder
irlbot
l.webis
larbin
ldspider
lexxebot
linguee bot
linkwalker
lmspider
lwp-trivial
mabontland
magpie-crawler
mediapartners-google
mj12bot
mnogosearch
mojeekbot
moreoverbot
morning paper
msnbot
mxbot
netresearchserver
netseer crawler
newsgator
ng-search
nicebot
noxtrumbot
nutchcvs
obot
oozbot
orangebot
polybot
psbot
pycurl
scoutjet
scrubby
seekbot
seochat::bot
seznambot
shim-crawler
shopwiki
shoula robot
silk/1
snappy
sogou spider
sosospider
speedy spider
stackrambler
suggybot
synoobot
teoma
thumbnail.cz robot
tineye
turnitinbot
twengabot
urlfilebot
vagabondo
voltron
websquash.com
yacy
yahoo! slurp
yahooseeker
yandexbot
yandeximages
yeti
yodaobot
youdaobot
zealbot
zyborg
Свернуть ответы
Комментарий автора
Отличная коллекция рептилий
Комментарий автора
Добавил в свой список блокировки 8 экземпляров. Если вы не уверены, что вам нужны все блокировки, спросите у специалистов сообщества.
У меня, например, разрешены боты русскоязычного поиска:
bingbot,
googlebot,
googlebot-image,
yandexbot.
А нагрузка на 8 сайтов при этом не больше 8 cp.
(Была до блокировки 160 cp).
Александр 0
01 дек в 2017
для определения - только логи, можно также запросить у хостера логи по обращению к файлам, если шла рассылка.
опции по умолчанию, для уменьшения нагрузки:
Disallow по ботам, кеширование, смена пути админки, отключение регистрации на сайте (там где не нужно конечно же), отключение комментариев и форм (где не нужны), блокировка IP по странам (временное), а также ограничение на отдачу страниц (http://avy.ru/ftopic1870.html) - метод старый но очень действенный, 2-3 дня и боты сдаются, получая ответкой 403 ошибку :)
проверено неоднократно.