Avoid logging specific user agents requests

Hello,

Following: http://trac.nginx.org/nginx/ticket/713

How does one avoid logging (ie set ‘access_log off’) requests from
specific
user agents?

Using ‘if’ would mean to use ‘return’ inside (as it is advised to do
with
that directive, not continuing the normal process).
Using ‘map’, as shown in ticket #713, does not work as expected.

Thanks,

B. R.

Page 18 from nginx for Windows - documentation 1.3;

map $request_uri $loggablevhts {
default 1;
/ngxvtstatus 0; # zero=do not log
/vtsvalues.js 0; # zero=do not log
/vtsvalues-eop.js 0; # zero=do not log
/ngxvtstatus/format/json 0; # zero=do not log
}
map $remote_addr $lcladdrvhts {
default 1;
~^(127.0.0.*)$ 0; # zero=do not log
}

don’t log vhts entries when request is local or from management

interface
map $loggablevhts$lcladdrvhts $loggable {
default 0;
~1 1;
}

access_log /path/to/access.log combined if=$loggable;

“A request will not be logged if the (IF) condition evaluates to “0” or
an
empty string”

Two simple ‘maps’ which are then combined tested in the third ‘map’
which is
used in the
IF evaluation of the log directive.

Tweak, change, add your own stuff with $request

See also nginx-simple-WAF.conf in the nginx for Windows release
archives.

Posted at Nginx Forum:

I tend to use official documentation only, and I run servers, not
Windows.

However, thanks for the pointer: the answer might be that ‘if’
parameter…
However not available in the stable branch yet.
I will see to it. Thanks again!

B. R.