Dram

Рейтинг
1114
Регистрация
28.06.2008

Спасибо, то что нужно!!!

Я просматриваю логи каждый час - из ботов по http 1.0 ходит только бот майл ру и то 1 его вид, который долбит robots.txt, но он заходит не часто, поэтому не тормозится. Ближайшие пару дней все 503 ошибки буду просматривать и анализировать вручную, мож че подкручу.

В общем остановился пока на этом

в секцию http

geo $whitelist {
default 0;
# боты google
64.68.80.0/21 1;
64.233.160.0/19 1;
66.102.0.0/20 1;
72.14.192.0/18 1;
209.85.128.0/17 1;
216.239.32.0/19 1;
66.249.0.0/16 1;
# боты yandex
77.88.0.0/18 1;
87.250.224.0/19 1;
93.158.0.0/16 1;
95.108.128.0/17 1;
213.180.192.0/19 1;
141.8.0.0/16 1;
130.193.0.0/16 1;
5.255.253.0/24 1;
178.154.149.0/24 1;

}
map $whitelist $limit {
0 $binary_remote_addr;
1 "";
}
limit_req_zone $limit zone=vse:10m rate=1r/s;

map $server_protocol $limit2 {
"HTTP/1.0" $binary_remote_addr;
default "";
}
limit_req_zone $limit2 zone=bot:10m rate=1r/m;

в секцию сервер нужного хоста

limit_req zone=vse burst=3 nodelay;
limit_req zone=bot;

Код работает, проверил. Он:

1. Не лимитирует основных поисковых ботов (можно дбавлять по желанию)

2. Всем остальным дает делать не более 1 запроса в секунду (с кратковременными всплесками до 3 запросов).

3. Тормозит разных зверей шляющихся по HTTP/1.0 до 1 запроса в минуту

Так же в сервер добавил наиболее бешеных ботов, шляющихся именно по моим сайтам

if ($http_user_agent ~ "ia_archiver|wget|Curl|libwww|BLEXBot|SBooksNet|MJ12bot|Java|NTENTbot|GetIntent|SemrushBot|HybridBot|AhrefsBot|SeznamBot|DeuSu|GrapeshotCrawler|SentiBot") {
return 444;
}
LeSoley:
с яндексом ясно, не работает их ящик для текстов.
в в гугле что у вас с этим вопросом?

Гоша очень быстро понял что это клон и там я его вижу очень редко и всегда далеко ниже меня

Едрить мадрить - limit_req zone=one burst=5 nodelay; нужно в http поднять?

Но этож тогда лимиты пойдут и на статику тоже. Других вариантов нет?

---------- Добавлено 26.12.2016 в 17:09 ----------

Все равно не понимаю, как лимит

limit_req zone=one

в секции сервер

может воздействовать на

limit_req_zone $limit_bots zone=goodbots
limit_req_zone $limit zone=bot

в секции http

зоны то разные!!!

---------- Добавлено 26.12.2016 в 17:20 ----------

Цитирую по ссылке выше

Если вам нужно одновременно несколько
limit_req (поддерживается начиная с версии nginx 1.1.14),
их следует указывать на одном уровне.

Так у меня так и указано - три в http

limit_req_zone $limit_bots zone=goodbots
limit_req_zone $limit zone=bot
limit_req_zone $binary_remote_addr zone=one

и три в сервер


limit_req zone=goodbots burst=5 nodelay;
limit_req zone=one burst=5 nodelay;
limit_req zone=bot;

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

На данный момент так:

map $http_user_agent $limit_bots {
default '';
~*(Googlebot|YandexBot) $binary_remote_addr;
}
limit_req_zone $limit_bots zone=goodbots:10m rate=5r/s;

map $server_protocol $limit {
"HTTP/1.0" $binary_remote_addr;
default "";
}
limit_req_zone $limit zone=bot:10m rate=1r/m;

теперь встал другой вопрос, как добавить еще один limit_req_zone так сказать для "всех остальных", кто не попал в первые 2 условия?

Если просто добавить ниже limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

то верхние правила перестанут работать, почем у так не понимаю.

в конфиге хоста пока так

limit_req zone=goodbots burst=5 nodelay;
# limit_req zone=one burst=5 nodelay;
limit_req zone=bot;

Проверил ДНС - не в них дело, тупо спарсили контент, самую малочь изменили структуру, поменяли дизайн и вперед

---------- Добавлено 26.12.2016 в 15:51 ----------

Алексей Питерский:
Напишите предупреждение про заверенные тексты и что будут иски.... Но это для будущих воров)))...

Вы когда-нибудь судились в России? Я судился, не советуйте больше этой глупости другим.

У нас правды не сыскать - суд я выграл 4 года назад (банальное не выполнение контракта), потом еще раз выграл 2 аппеляции - денег не увидел до сих пор, только - 200 тыщ. на суды.

Роза умирает уже дня 3-4... по крайне мере у меня

Вот так не работает:

map $server_protocol $limit {
default 0;
"HTTP/1.0" $binary_remote_addr;
"HTTP/1.1" "";
"HTTP/2.0" "";
}
limit_req_zone $limit zone=bot:10m rate=1r/m;

ВОт так получаю сам 503

map $server_protocol $limit {
default 0;
"HTTP/1.0" $binary_remote_addr;
"HTTP/1.1" "2";
"HTTP/2.0" "3";
}
limit_req_zone $limit zone=bot:10m rate=1r/m;

попробовал так

map $server_protocol $limit {
default 0;
"HTTP/1.0" 1;
}
limit_req_zone $limit zone=bot:10m rate=1r/m;

и получил сам 503 ошибку

в логах с моего айпи первый запрос

7*.1*2.7*.2** - - [25/Dec/2016:22:19:19 +0300] "GET / HTTP/1.1" 301

второй

7*.1*2.7*.2** - - [25/Dec/2016:22:19:19 +0300] "GET / HTTP/2.0" 503

Нифига не понимаю короч

Всего: 6924