Nginx Log Format

Nginx allows you to configure the log format quite easily.

The standard log is basically useful but can be extended with extra useful info.

Log Locations

Unless configured not to, each request is logged

The locations default to /var/log/nginx/access.log and /var/log/nginx/error.log, however logging to these files is highly inadvised.

Per Server Block Log Files

Instead of allowing all logs to go into the main files described above, it is much better to log requests to each server block to their own set of files

For example:

1
2
3
4
5
server {
    #server block configs..

    access_log /var/log/nginx/www.domain.com.access.log main;
    error_log /var/log/nginx/www.domain.com.error.log info;

Log Format

The access log format is defined in /etc/nginx/nginx.conf

Suggested Access Log Format

Here is a suggested log format:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    server_tokens on;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request "'
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
                      '{P:$server_port} '
                      '{SSL:$scheme|$ssl_protocol|$ssl_cipher} '
                      '{RT:$request_time} '
                      '{CT:$connection}';
    access_log  /var/log/nginx/access.log  main;

Notice the use of variables and also a "grep friendly" syntax using {} characters to demarcate sections.

There is an extensive list of variables you can use, see this list