![Come disabilitare Ad Blocker in Chrome?](/f/8d361825f9160ffa622b6641a426df29.png?width=100&height=100)
Nginx HTTP il server ha una struttura di registrazione fenomenale che è altamente personalizzabile. In questo articolo, spiegheremo come configurare i tuoi formati per i log di accesso e di errore per Nginx in Linux.
Lo scopo di questa guida è aiutarti a capire come vengono generati i log, in modo da configurare formati di log personalizzati per scopi di debug, risoluzione dei problemi o analisi di ciò che si svolge all'interno del server Web e delle applicazioni Web (come il tracciamento) richieste).
Leggi anche: 4 buoni strumenti di monitoraggio e gestione dei log open source per Linux
Questo articolo è composto da tre sezioni che ti illumineranno sulla configurazione log di accesso/errore e come abilitare la registrazione condizionale in Nginx.
Sotto Nginx, tutte le richieste del client al server vengono registrate nel registro di accesso in un formato specificato utilizzando il ngx_http_log_module modulo.
Il file di registro predefinito è log/access.log
(di solito /var/log/nginx/access_log su sistemi Linux) e il formato predefinito per la registrazione è normalmente il formato combinato o principale (questo può variare da una distribuzione all'altra).Il access_log direttiva (applicabile in http, server, location, se in location e limit tranne contesto) viene utilizzata per impostare il file di registro e il log_format La direttiva (applicabile solo nel contesto http) viene utilizzata per impostare il formato del registro. Il formato del registro è descritto da variabili comuni e variabili generate solo nel momento in cui viene scritto un registro.
La sintassi per la configurazione di un formato di registro è:
log_format nome_formato 'set_of_variables_to_define_format';
e la sintassi per la configurazione del log di accesso è:
access_log /percorso/a/file_log nome_formato; #forma più semplice OR. access_log /path/to/log_file [formato [buffer=dimensione] [gzip[=livello]] [flush=tempo] [if=condizione]];
Quello che segue è un estratto dal file di configurazione Nginx predefinito /etc/nginx/nginx.conf sopra CentOS 7.
/etc/nginx/nginx.conf
http { #formato log principale log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$stato $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log; }
Questo formato di registro restituisce la seguente voce di registro.
127.0.0.1 - dbmanager [20/Nov/2017:18:52:17 +0000] "GET / HTTP/1.1" 401 188 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0"
Quello che segue è un altro formato di registrazione utile che utilizziamo per tracciare le richieste alle nostre applicazioni Web utilizzando alcuni dei variabili predefinite, ha soprattutto l'ID della richiesta e registra i dettagli della posizione del cliente (paese, codice paese, regione e città).
/etc/nginx/nginx.conf
log_format custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_x_forwarded_for" $request_id ' '$geoip_nome_paese $geoip_codice_paese ' '$geoip_region_name $geoip_city ';
Puoi usarlo in questo modo:
access_log /var/log/nginx/access.log personalizzato;
Questo produrrà una voce di registro che appare come questa.
153.78.107.192 - - [21/Nov/2017:08:45:45 +0000] "POST /ngx_pagespeed_beacon? url=https%3A%2F%2Fwww.example.com%2Fads%2Ffresh-oranges-1509260795 HTTP/2.0" 204 0 " https://www.suasell.com/ads/fresh-oranges-1509260795" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0" "-" a02b2dea9cf06344a25611c1d7ad72db Uganda UG Kampala Kampala
È possibile specificare diversi registri utilizzando il access_log direttive allo stesso livello, qui stiamo usando più di un file di log nel contesto http.
/etc/nginx/nginx.conf
http{ ##formato di registro predefinito log_format main '$indir_remoto - $utente_remoto [$locale_ora] "$richiesta" ' '$stato $corpo_bytes_inviato "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; ##request tracing utilizzando il formato personalizzato log_format custom '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" ' '"$http_x_forwarded_for" $request_id ' '$geoip_nome_paese $geoip_codice_paese ' '$geoip_region_name $geoip_city '; ##this utilizza il formato di registro predefinito access_log /var/log/nginx/access.log; ##this usa il nostro formato di log personalizzato access_log /var/log/nginx/custom_log custom; }
Di seguito sono riportati esempi di configurazioni di registrazione più avanzate, utili per i formati di registro che contengono variabili relative alla compressione e per la creazione di file di registro compressi:
access_log /var/log/nginx/custom_log buffer personalizzato 32k; access_log /percorso/a/log.gz compressione gzip flush=5m;
Nel caso Nginx riscontra eventuali problemi, registra le informazioni che li riguardano nel registro degli errori. Questi problemi rientrano in diversi livelli di gravità: eseguire il debug, Informazioni, Avviso, avvisare, errore (questo è il livello predefinito e funziona a livello globale), critico, mettere in guardia, o emergente.
Il file di registro predefinito è log/error.log, ma normalmente si trova in /var/log/nginx/ sulle distribuzioni Linux. Il error_log La direttiva viene utilizzata per specificare il file di registro e può essere utilizzata nel contesto principale, http, mail, stream, server, location (in quest'ordine).
Dovresti anche notare che:
È possibile configurare la registrazione degli errori utilizzando la seguente sintassi:
log_errori /percorso/a/file_log livello_log;
Per esempio:
error_log /var/log/nginx/error_log warn;
Questo indicherà a Nginx di registrare tutti i messaggi di tipo avvisare e livello di registro più grave critico, mettere in guardia, e emergente messaggi.
Nel prossimo esempio, i messaggi di critico, mettere in guardia, e emergente livelli verranno registrati.
error_log /var/www/example1.com/log/error_log crit;
Considera la configurazione di seguito, qui abbiamo definito la registrazione degli errori su diversi livelli (nel contesto http e server). In caso di errore, il messaggio viene scritto su un solo log degli errori, quello più vicino al livello in cui è apparso l'errore.
/etc/nginx/nginx.conf
http { log_format compression '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"'; error_log /var/log/nginx/error_log crit; server { ascolta 80; nome_server esempio1.com; #this registra i messaggi di errore solo per example1.com error_log /var/log/nginx/example1.error_log warn; …... } server { ascolta 80; nome_server esempio2.com; #this registra i messaggi di errore solo per example2.com error_log /var/log/nginx/example1.error_log; ……. } }
Se ne usi più di uno error_log direttive come nella configurazione sottostante (stesso livello), i messaggi vengono scritti su tutti i log specificati.
/etc/nginx/nginx.conf
server { ascolta 80; nome_server esempio1.com; error_log /var/www/example1.com/log/error_log warn; error_log /var/log/nginx/example1.error_log crit; …... }
In alcuni casi, potremmo volere che Nginx esegua la registrazione condizionale dei messaggi. Non tutti i messaggi devono essere registrati da Nginx, quindi possiamo ignorare voci di registro insignificanti o meno importanti dai nostri registri di accesso per istanze particolari.
Possiamo usare il ngx_http_map_module modulo che crea variabili i cui valori dipendono dai valori di altre variabili. I parametri all'interno di un blocco mappa (che dovrebbe esistere solo nel contenuto http) specificano una mappatura tra i valori di origine e risultanti.
Per questo tipo di impostazione, una richiesta non verrà registrata se la condizione viene valutata come “0”
o una stringa vuota. Questo esempio esclude le richieste con codici di stato HTTP 2xx e 3xx.
/etc/nginx/nginx.conf
http{ mappa $stato $condizione { ~^[23] 0; predefinito 1; } server{ access_log /path/to/access.log custom if=$condition; } }
Ecco un altro esempio utile per il debug di un'applicazione web in una fase di sviluppo. Ciò ignorerà tutti i messaggi e registrerà solo le informazioni di debug.
/etc/nginx/nginx.conf
http{ map $info $debuggable { default 0; mettere a punto 1; } server{ …….. access_log /var/log/nginx/testapp_debug_access_log debug if=$debuggable; #logs altre richieste access_log /var/log/nginx/testapp_access.log main; ……. } }
Puoi trovare maggiori informazioni, incluso l'accesso a syslog qui.
È tutto per ora! In questa guida, abbiamo spiegato come configurare il formato di registrazione personalizzato per i registri di accesso e di errore in Nginx. Usa il modulo di feedback qui sotto per porre domande o condividere i tuoi pensieri su questo articolo.