Welcome! Log In Create A New Profile

Advanced

map для вывод записей в error.log по условию

May 27, 2016 03:09PM
Проблема:
В логе есть множество не нужных 404 ошибок. Например, c перебором всего URL.
Пример с юзерагентом WhatsApp:
http://domen.com/category/subcategory/subsubcategory/page
http://domen.com/category/subcategory/subsubcategory/pag
http://domen.com/category/subcategory/subsubcategory/pa
...
http://domen.com/c

Кстати, зачем он так делает?!


ЗАДАЧА:
Писать в отдельный error.log только записи с реферером, исключая некоторые UA.


РЕАЛИЗАЦИЯ:
map "$http_user_agent" $iswa {
default 1;
~WhatsApp 0;
}
map "$http_referer:$iswa:$status" $log404 {
default 0;
~^http.+:1:4[0-9][0-9] 1;
~^http.+:1:50[0-9] 1;
}
...
sever {
access_log /path/domen.error.log combined if=$log404;
...
}

Записываем в отдельный лог все UA кроме WhatsApp, и только 4хх и 50х ошибки (4[0-9][0-9] и 50[0-9]), при НЕ пустом реферере (^http.+).

Если вместо ^http.+ поставить .+ заметно увеличивается нагрузка.
~.+ - заметно грузит nginx (вместо 2% на процесс - получается 7%)
~^http.+ - не так сильно грузит процессор.


ВОПРОСЫ:
1. Верна ли реализация, в общем?
2. Какой регуляркой лучше указывать - НЕ пустая строка? Странно, что так сильно грузит ~.+.
3. Имеет ли значение порядок переменных в map? Возможно простые условия (без регулярок) лучше ставить первыми?
4. Есть ли возможность указать ! (NOT) для условия в map?
Subject Author Posted

map для вывод записей в error.log по условию

dim1 May 27, 2016 03:09PM

Re: map для вывод записей в error.log по условию

Maxim Dounin May 30, 2016 10:30AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 61
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready