Задача привести логи к адекватному виду. В этом примере пишем в отдельный файл лога всех ботов. В другом оставляем всё остальное. Версия NGINX 1.10.3.
В первую очередь создаём map в которой перечисляем всех ботов которых будем писать в отдельный файл. Переменные map пишутся в контексте блока html.
Редактируем конфигурационный файл nginx.conf:
default 0;
~*(Googlebot|YandexBot|YandexMetrika) 1;
~*(Slurp) 1;
}
т. е.
$http_user_agent - критерий по которому будем сортировать логи (User Agent);
$bot - произвольная переменная;
~* - не учитываем регистр;
Т. е. если в поле UserAgent будет присутствовать, например, YandexBot или Slurp, то значение переменной будет = 1, если нет, то - 0. Этим и воспользуемся в блоке server.
server {
access_log /var/log/nginx/bot.log main if=$bot;
location / {
if ($bot = 0 ) {
access_log /var/log/nginx/access.log main;
}
}
}
Т. е. строка с директивой access_log говорит, что пишем в bot.log то, что попадает подусловие map с переменной $bot. И далее в локейшене условие if, при котором если в UserAgent не содержится, например, YandexBot или Slurp, то пишется всё в access.log.