Проблема: В логе есть множество не нужных 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? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,267206,267206#msg-267206 _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru