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

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

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

Здесь в Яндексе более 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 и так далее. Лично мне они мне не нужны, поэтому они тоже находятся в черных списках на доступ.

0

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

  1. Аватар

    seoonly.ru

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

    0
    Ответить
  2. Аватар

    Pavel

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

    0
    Ответить
    1. Аватар

      Alen AstraportPavel

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

      0
      Ответить
  3. Аватар

    Владилен

    Semrush несколько месяцев уже отдаю ему 403, а он никак не угомонится. Видимо придётся на файрволле закрывать подсеть

    1+
    Ответить
  4. Аватар

    Вадим

    это не гугла бот User-Agent? что это за бот

    0
    Ответить
    1. Аватар

      ВадимВадим

      Лучше его не закрывать ошибочка

      0
      Ответить
  5. Аватар

    Владимир

    Может кто-нибудь знает как добавить в белый список ботов facebook?

    0
    Ответить

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

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


Последнее в этой категории:
Про_Онлайн | 31 | 2 326 | 06/02/2019
Яндекс.Будущее — вэбмастэр, тiкай з Интернету, тобi пiзда!

Наступят времена, когда у всех в красных углах будут стоять не православные иконы, а картины, на которых будет выведено двусмысленное - "Я.Бог".

Про_Онлайн | 48 | 3 335 | 21/12/2018
Моральная сторона дорвеев 18+

Входит ли клепание дорвеев в понятие "аморальное поведение"? Разбираемся на кошках.

Про_Онлайн | 1 | 7 558 | 04/06/2018
Дорвеи в Яндексе в 2к18 году: второе дыхание

Мысли о том, как должен выглядеть дорвей в 2018 году, чтобы его полюбил Яндекс и выдавал ему порцию трафа.

Про_Онлайн | 14 | 1 865 | 23/01/2018
Как Вконтакте может стать «Интернетом в Интернете» и забрать себе весь траф

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

Про_Онлайн | 15 | 7 400 | 22/12/2017
«Не заморачивайтесь». Платон ответил по поводу наличия копипаста на сайте.

Копипаст и мифы о нём. Как разнообразить сайты заимствованным контентом. Пример сайта, который сделан полностью на копированных статьях.

Про_Онлайн | 3 | 2 445 | 20/12/2017
Как быстро переклеить зафильтрованный сайт и вернуть трафик

Небольшая инструкция о том, как переехать с одного домена на другой, если ваш сайт забанили или он попал под фильтр. Многочисленные переезды актуальны для "серых" тематик.