Opened 5 years ago

Closed 5 years ago

#713 closed defect (invalid)

access_log path with variable computes path incorrectly

Reported by: https://stackoverflow.com/users/573152/bernard-rosset Owned by:
Priority: minor Milestone:
Component: nginx-module Version: 1.6.x
Keywords: Cc:
uname -a: Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux
nginx -V: nginx version: nginx/1.6.2 built by gcc 4.7.2 (Debian 4.7.2-5) TLS SNI support enabled configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_spdy_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-z,relro -Wl,--as-needed' --with-ipv6

Description

In /etc/nginx/conf.d/example.com.conf:

map $http_user_agent $access_log {
    ~*bot       off;
    default     /var/log/nginx/example.com/access.log;
}
server {
    access_log  $access_log main;
}

File is included from /etc/nginx/nginx.conf, after log_format main is defined

error.log contains:

[crit] 9091#0: *252296 open() "/etc/nginx//var/log/nginx/example.com/access.log" failed (2: No such file or directory) while logging request

Change History (1)

comment:1 Changed 5 years ago by pluknet

  • Resolution set to invalid
  • Status changed from new to closed

This is because access_log with variables respects the root path, whilst the intermediate directories do not exist. See http://nginx.org/r/access_log:

: during each log write the existence of the request’s root directory is checked, and if it : does not exist the log is not created

An another unnoticed configuration error is trying to use the special off value as calculated from the access_log variable: such configuration would not work as one could expect, because it will rather log the request at the specified "off" file path (again, wrt the root directory). See http://nginx.org/r/access_log:

: The special value off cancels all access_log directives on the current level.

Note that the "off" is a literal value.
See below:

: The file path can contain variables.

That means that variables is the only property of file paths.

You better try with "access_log if" facility.

Note: See TracTickets for help on using tickets.