NGINX

Nginx: Disable logging of Varnish backend probes

by , , revisited on


We have by far the largest RPM repository with dynamic stable NGINX modules and VMODs for Varnish 4.1 and 6.0 LTS. If you want to install NGINX, Varnish and lots of useful modules for them, this is your one stop repository to get all performance related software.
You have to maintain an active subscription in order to be able to use the repository!

Once you have configured Varnish backend probes, you might see all of the in your backend application access logs. Most likely you want those to be filtered and not logged. Filtering those requests will make your access log contain more relevant entries.

Based on my answer for this question on StackOverflow.

In your nginx.conf put the following inside http { ... } block:

map "$request_method:$request_uri:$remote_addr" $loggable {
    "HEAD:/:127.0.0.1" 0;
    default 1;    
}

Find your access_log directive and add the if condition to it like so:

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

What this does, is logs requests conditionally: a HEAD request to / made by localhost, will not be logged. Everything else is logged as usual.

Naturally, you will have to adjust "HEAD:/:127.0.0.1" if your probe uses different request method, resource or if Varnish is not on the same machine, e.g. "GET:/healthcheck:1.2.3.4" will not log GET requests to /healthcheck by 1.2.3.4.


Also published on Medium.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.