tm

   Задача привести логи к адекватному виду. В этом примере пишем в отдельный файл лога всех ботов. В другом оставляем всё остальное. Версия NGINX 1.10.3.

В первую очередь создаём map в которой перечисляем всех ботов которых будем писать в отдельный файл. Переменные map пишутся в контексте блока html.

Редактируем конфигурационный файл nginx.conf:

nano /путь/до/nginx.conf
map $http_user_agent $bot {
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.

Добавить комментарий


Защитный код
Обновить