Делюсь своим опытом в статье.
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
То есть защита наша работает, но пока работает лишь частично. Нагрузка остаётся завышенной.
ИТОГ
В результате наших действий нагрузка снизилась вдвое прежней, но мы ведем поиск оптимизации доступа.
У кого есть положительный опыт принятия мер по определению и устранению причин чрезмерной нагрузки на сервер? Просьба поделиться подробно, поскольку эта проблема становится актуальной для многих.
Комментарии
Особенно кэширование на стороне клиента
Я пользуюсь опцией: "Прогрессивное кэширование"
Для выделенного сервера я предпочитаю настраивать вручную несколько правил на nginx. Максимум был почти миллион хитов в сутки. Да, с программистско-оптимизаторской точки зрения это "читерство", зато позволяет на неоптимизированном коде серверу не падать от слэшдот/хабраэффекта/пауэрофтупичок.
В файл я добавил ещё строчку:
User-agent: *
Crawl-delay: 10
Кстати, ещё можно отвадить краулеров и ботов от нежелательных и, в общем, не нужных для них папок сайта (надо только подумать каких именно). Примеры - в статье на википедии посвящённой файлу robots.txt и как с ним работать.
Вадим Викторович - спасибо Вам большое за ценную публикацию! Благодаря Вашей статье мне удалось снизить нагрузку на свои сайты (в денежном эквиваленте - это экономия 80 р. в месяц за увеличение лимита, всё видно на скриншоте).
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
У меня, например, разрешены боты русскоязычного поиска:
bingbot,
googlebot,
googlebot-image,
yandexbot.
А нагрузка на 8 сайтов при этом не больше 8 cp.
(Была до блокировки 160 cp).
опции по умолчанию, для уменьшения нагрузки:
Disallow по ботам, кеширование, смена пути админки, отключение регистрации на сайте (там где не нужно конечно же), отключение комментариев и форм (где не нужны), блокировка IP по странам (временное), а также ограничение на отдачу страниц (http://avy.ru/ftopic1870.html) - метод старый но очень действенный, 2-3 дня и боты сдаются, получая ответкой 403 ошибку :)
проверено неоднократно.