Как сгенерировать сайт на миллионы страниц и не положить сервер

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

Например, вот индексация у меня на одной из сеток:

Здесь в Яндексе более 10 миллионов страниц.

И, если все бросить на самотёк и не предпринимать никаких мер, то сервер просто умрёт под натиском всяких там ahrefs, semrush, bing и прочих ботов, которые шерстят сеть, создавая дополнительную нагрузку.

Например, в канувшей в лету DCMS (cms от Дугласа) вообще не было заботы о том, чтобы максимально оптимизировать нагрузку на сервере. Там генерировалась хуева туча тумб, которые складывались на диск. Если какие-то боты начинали срываться с цепи, то мы получали хана всей дисковой подсистеме. Все эти постоянные дергания с диска мелких и, по сути, не нужных файлов приводили к тому, что все вставало сначала раком, потом колом.

Понятное дело, что ботов Яндекса и Гугла нам надо пускать на сайты и, если у вас миллионы страниц, то придется возиться с оптимизацией скриптов \ серверов, но вот плохих ботов, которые лезут без спроса — можно и нужно отсекать на уровне веб-сервера. Nginx или Apache, у кого что. Или же, можно фильтровать через iptables, не пуская их даже до веб-сервера.

Список плохих ботов, которых можно блокировать

Bad_bots
LinkpadBot
Sosospider
Sogou web spider
aesop_com_spiderman
SemrushBot
backweb
batchftp
black.hole
blackwidow
blowfish
botalot
buddy
builtbottough
bullseye
cheesebot
cherrypicker
chinaclaw
collector
copier
copyrightcheck
cosmos
crescent
custo
da
diibot
disco
dittospyder
dragonfly
drip
easydl
ebingbong
ecatch
eirgrabber
emailcollector
emailsiphon
emailwolf
erocrawler
exabot
eyenetie
filehound
flashget
flunky
frontpage
getright
getweb
go.?zilla
go-ahead-got-it
gotit
grabnet
grafula
harvest
hloader
hmview
httplib
httrack
humanlinks
ilsebot
infonavirobot
infotekies
intelliseek
interget
iria
jennybot
jetcar
joc
justview
jyxobot
kenjin
keyword
larbin
leechftp
lexibot
lftp
libweb
likse
linkscan
linkwalker
lnspiderguy
lwp
magnet
mag-net
markwatch
mata.hari
memo
microsoft.url
midown.tool
miixpc
mirror
missigua
mister.pix
moget
mozilla.newt
nameprotect
navroad
backdoorbot
nearsite
net.?vampire
netants
netcraft
netmechanic
netspider
nextgensearchbot
attach
nicerspro
nimblecrawler
npbot
octopus
offline.?explorer
offline.navigator
openfind
outfoxbot
pagegrabber
papa
pavuk
pcbrowser
php.?version.?tracker
pockey
propowerbot
prowebwalker
psbot
pump
queryn
recorder
realdownload
reaper
reget
true_robot
repomonkey
rma
internetseer
sitesnagger
siphon
slysearch
smartdownload
snake
snapbot
snoopy
sogou
spacebison
spankbot
spanner
sqworm
superbot
superhttp
surfbot
asterias
suzuran
szukacz
takeout
teleport
telesoft
the.intraformant
thenomad
tighttwatbot
titan
urldispatcher
turingos
turnitinbot
urly.warning
vacuum
vci
voideye
whacker
libwww-perl
widow
wisenutbot
wwwoffle
xaldon
xenu
zeus
zyborg
anonymouse
zip
emaile
enhancer
fetch
go.?is
auto
bandit
clip
copier
sauger
site.quester
whack
craftbot
download
extract
stripper
sucker
ninja
clshttp
webspider
leacher
grabber
webpictures
Jakarta
User-Agent
libwww
lwp-trivial
PHPCrawl
WEP Search
Missigua Locator
ISC Systems iRc
Aboundex
360Spider
Java
Cogentbot
BunnySlippers
Cegbfeieh
AIBOT
Demon
Devil
Wonder
Foobot
Kenjin Spider
Density
LinkextractorPro
LWP::Simple
MassDownloader
Mass Downloader
NetZIP
NG
Metasearch
WebFetch
WebCopier
Webclipping
WebBandit
WebAuto
WebGo
Web.Image.Collector
WebLeacher
WebmasterWorldForumBot
WebReaper
WebSauger
eXtractor
Webster
WebStripper
WebWhacker
WebZIP
Slurp
slurp
msnbot
bingbot
musobot
MJ12bot
AhrefsBot
NjuiceBot
Gigabot
Baiduspider
JS-Kit
Voyager
PostRank
PycURL
Aport
ia_archiver
DotBot
SurveyBot
larbin
Butterfly
libwww
Wget
SWeb
LinkExchanger
Soup
WordPress
spbot
MLBot
InternetSeer
FairShare
Yeti
Birubot
YottosBot
Linguee
Ezooms
lwp-trivial
Purebot
kmSearchBot
SiteBot
CamontSpider
ptd-crawler
HTTrack
suggybot
ttCrawler
Nutch
SputnikBot
SputnikImageBot

Как фильтровать: Nginx и Apache

В Nginx в секции server можно вставить прямо так:

Nginx_code
if ($http_user_agent ~* «LinkpadBot|Sosospider|Sogou web spider|aesop_com_spiderman|SemrushBot|…|SputnikBot|SputnikImageBot») {
return 444;
}

Вместо многоточия любые другие боты через разделитель «|».

В Apache через .htaccess можно блокировать как-то так:

Apache_code
RewriteCond %{HTTP_USER_AGENT} msnbot [OR]
RewriteCond %{HTTP_USER_AGENT} Slurp [OR]
RewriteCond %{HTTP_USER_AGENT} SemrushBot [OR]
RewriteCond %{HTTP_USER_AGENT} … [OR]
RewriteCond %{HTTP_USER_AGENT} AhrefsBot
RewriteRule ^(.*)$ – [F,L]

Вместо многоточия, опять же, юзер агенты ботов.

Если идет непонятная нагрузка

Бывает такое, что вроде всех ботов отсекаем, но неожиданно растет нагрузка. Либо появился какой-то новый говнобот, либо кто-то вас начал парсить из-за чего пошел ddos на сервер.

В таких случая стоит включить логи доступа для сайтов и проверить какую такую активность развели на ваших ресурсах.

Можно глянуть логи, например, так:

awk -F ‘»‘ ‘{print $6}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 50

Там сразу будет видно, с какого IP или Юзер агента идут множественные запросы. И после этого уже блокировать их на подлете.

Блокировка через Iptables

Еще один вариант, как заблочить плохих парней.

Выглядит он примерно так:

Bad_bots_iptables
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «LinkpadBot» —to 1000 -j DROP
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «SemrushBot» —to 1000 -j DROP
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «BLEXBot» —to 1000 -j DROP
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «archive.org» —to 1000 -j DROP
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «coccocbot» —to 1000 -j DROP
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «ltx71.com» —to 1000 -j DROP
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «MJ12bot» —to 1000 -j DROP
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «uCrawler» —to 1000 -j DROP
iptables -I INPUT -p tcp —dport 80 -m string —algo bm —string «Slurp» —to 1000 -j DROP

Этот встроенный в Linux фаерволл особенно эффективен, когда нужно дропать на подходе какие-то айпишники. Главное, не заблочить себя и белые айпи, а то будет ай-ай (:

P.S. Иногда сервер могут напрягать и белые боты, такие как YandexVideoParser, YandexImages, Mail.RU_Bot и так далее. Лично мне они мне не нужны, поэтому они тоже находятся в черных списках на доступ.

Комментарии к посту:

  1. seoonly.ru

    очень плохие боты)

    0
    Ответить
  2. Pavel

    Как этих всех ботов запихунуть в htaccess ?

    0
    Ответить
    1. Alen AstraportPavel

      Вы статью не читали?

      0
      Ответить

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Похожие записи
Онлайн | 193 | 25/04/2017
FaceBook: Столкновение с ViralHog

В 5.38 и 5.39 утра последовательно прилетели две жалобы на видеоролики, которые мы размещали в одном из пабликов. Инициатор жалоб...

Онлайн | 6 | 1 085 | 08/01/2018
Эксперимент с Facebook. Месяц #12. Последний. Итоги и выводы.

Итоговый отчет по годовому эксперименту работы с Фейсбуком. Итоги, выводы, финансы.

Онлайн | 2 752 | 18/08/2018
Разбор полетов: сетка юридических дорвеев на 30к посетителей в сутки

Краткий разбор небольшой сетки дорвеев под юридический трафик. Домены, реализация, монетизация.

Онлайн | 955 | 31/08/2018
Поколение Y-tube: видеонаркотики и подглядывание за чужой жизнью

Когда-нибудь видеозапись каждого нашего прожитого дня можно будет найти на YouTube. И только число лайков сможет решить: была ли твоя жизнь дерьмом?

Онлайн | 356 | 02/02/2017
Эксперимент с Facebook. Месяц #1

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

Онлайн | 4 399 | 25/04/2018
«200-300$ дейли это так, х@йня». Интервью со Скудоумом (Stimmi)

Ютуб, блогинг, книги, Дуров и влажные губы. Интервью со Stimmi.