anulando la directiva nginx access_log - entradas de registro duplicadas

16

Estoy usando el paquete nginx predeterminado en el servidor Ubuntu 14.04. Se está utilizando /etc/nginx/nginx.confcomo configuración principal y luego incluye configuraciones de /etc/nginx/conf.d/*.confy /etc/nginx/sites-enabled/*.

La configuración predeterminada de nginx tiene esta directiva para iniciar sesión en el registro de acceso

access_log /var/log/nginx/access.log;

Me gustaría agregar el encabezado X-Fordered-For, así que hago esto dentro de la conf.dcarpeta:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                 '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

El problema que tengo es que luego obtengo dos registros dentro de mi archivo access.log, uno con la información del encabezado y otro sin él.

Sé que puedo sobrescribir el nginx.confarchivo en sí, pero prefiero evitarlo si es posible. También me gustaría seguir usando el mismo archivo de registro ( access.log).

¿Hay alguna manera de decirle a nginx que anule la directiva anterior y simplemente cambie el formato de registro sin modificar el nginx.confarchivo principal ?

Yoav Aner
fuente
No Simplemente quítelo de nginx.conf
Alexey Ten
1
He abierto un boleto para esto; trac.nginx.org/nginx/ticket/1084
cweiske

Respuestas:

4

la respuesta a su pregunta es NO, no puede anular un log_format en ningún nivel en nginx y no puede anular access_log cuando esté en el mismo nivel, excepto desactivarlo. Sin embargo, puede lograr lo que desea sin cambiar nginx.conf, pero tendrá que hacerlo a nivel del servidor {}.

El problema aquí es que la inclusión de conf.d / * está dentro de http {}, que es exactamente donde está la directiva access_log. Lo que puede hacer sin tocar nginx.conf es cambiar el servidor {} que esté utilizando (si no configuró uno, está utilizando el predeterminado ubicado en / etc / nginx / sites-enabled / default). Entonces, para lograr lo mismo sin cambiar nginx.conf, debe cambiar su archivo en la carpeta conf.d a: log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log off;

Y luego dentro de su servidor {} poner: access_log /var/log/nginx/access.log main;

Eso debería darte lo que querías al principio.

Valor
fuente
Gracias, eso funciona muy bien. Excepto que generalmente ya hay un mainlog_format, por lo que debe elegir otro nombre.
Kutzi