Недавно подопечные сервера начали перегружаться по DDoS, как правило, с одного ip из примерно 3000 шел один запрос на произвольную страницу одного из сайтов сервера с user agent Googlebot. IP не принадлежал сетям Google.
Появилась идея опознать бота и разрешить доступ только для сетей google. Конструкция вида if ($http_user_agent ~* googlebot ) { deny all; allow GOOGLENETS;} не разрешается. На основе ветки http://forum.nginx.org/read.php?2,202715,202715#msg-202715 и статьи хабра был составлен рецепт
http {
#...
geo $bot_ip {
default 0;
216.239.32.0/19 1;
64.233.160.0/19 1;
66.249.80.0/20 1;
66.249.64.0/19 1;
72.14.192.0/18 1;
209.85.128.0/17 1;
66.102.0.0/20 1;
74.125.0.0/16 1;
64.18.0.0/20 1;
207.126.144.0/20 1;
173.194.0.0/16 1;
}
map $http_user_agent $is_bot {
default 0;
~Googlebot 1;
}
map "$is_bot:$bot_ip" $fake_bot {
default 0;
"1:0" 1;
}
# ...
server {
#...
if ($fake_bot) {
return 418;
}
#...
}
#...
}
Код ошибки выбран для парсинга логов на предмет новых ip гугла.
Привел тут как пример решения задачи и для поиска более оптимальных решений