sovrascrivendo la direttiva nginx access_log - voci di registro duplicate


16

Sto usando il pacchetto nginx predefinito sul server Ubuntu 14.04. Viene utilizzato /etc/nginx/nginx.confcome configurazione principale, quindi include le configurazioni da /etc/nginx/conf.d/*.confe /etc/nginx/sites-enabled/*.

La configurazione predefinita di nginx ha questa direttiva per accedere al registro di accesso

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

Vorrei aggiungere l'intestazione X-Forwarded-For, quindi faccio questo all'interno della conf.dcartella:

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;

Il problema che ho è che poi sto ottenendo due record nel mio file access.log - uno con le informazioni di intestazione e un altro senza.

So di poter sovrascrivere il nginx.conffile stesso, ma preferirei evitarlo se possibile. Vorrei anche continuare a utilizzare lo stesso file di registro ( access.log).

C'è un modo per dire a nginx di sovrascrivere la direttiva precedente e semplicemente cambiare il formato del registro senza modificare il nginx.conffile principale ?


No. Basta rimuoverlo da nginx.conf
Alexey Ten,

1
Ho aperto un biglietto per questo; trac.nginx.org/nginx/ticket/1084
cweiske,

Risposte:


4

la risposta alla tua domanda è NO, non puoi sovrascrivere un log_format a nessun livello in nginx e non puoi sovrascrivere access_log quando sei nello stesso livello, tranne spegnerlo. Tuttavia, puoi ottenere ciò che volevi senza cambiare nginx.conf ma dovrai farlo a livello di server {}.

Il problema qui è che l'inclusione di conf.d / * è all'interno di http {}, che è esattamente dove si trova la direttiva access_log. Quello che puoi fare senza toccare nginx.conf è cambiare qualunque server {} stai usando (se non ne hai installato uno, stai usando quello predefinito che si trova in / etc / nginx / siti-enabled / default). Quindi, per ottenere lo stesso risultato senza modificare nginx.conf, è necessario modificare il file nella cartella conf.d in: 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;

E poi all'interno del tuo server {} inserisci: access_log /var/log/nginx/access.log main;

Questo dovrebbe darti quello che volevi all'inizio.


Grazie, funziona benissimo. Tranne che di solito c'è già un mainlog_format, quindi è necessario scegliere un altro nome.
Kutzi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.