anulación de la directiva nginx access_log: entradas de registro duplicadas

anulación de la directiva nginx access_log: entradas de registro duplicadas

Estoy usando el paquete nginx predeterminado en el servidor Ubuntu 14.04. Se utiliza /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-Forwarded-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 obtengo dos registros dentro de mi archivo access.log: uno con la información del encabezado y otro sin ella.

Sé que puedo sobrescribir el nginx.confarchivo, 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?

Respuesta1

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 en el 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é usando (si no configuró uno, está usando el predeterminado ubicado en /etc/nginx/sites-enabled/default). Entonces, para lograr lo mismo sin cambiar nginx.conf, debes cambiar tu 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 tu servidor{} pon: access_log /var/log/nginx/access.log main;

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

información relacionada