Quantcast
Channel: Nginx Forum - Nginx Mailing List - Russian
Viewing all articles
Browse latest Browse all 3102

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

$
0
0
Проблема:
В логе есть множество не нужных 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?

Viewing all articles
Browse latest Browse all 3102

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>