Introduzione

Nginx è un server HTTP e proxy inverso open source ad alte prestazioni responsabile della gestione del carico di alcuni dei più grandi siti su Internet. Quando si gestiscono i server Web NGINX , una delle attività più frequenti che si eseguono è il controllo dei file di registro (logs).

Sapere come configurare e leggere i registri è molto utile durante la risoluzione dei problemi del server o dell'applicazione in quanto forniscono informazioni dettagliate sul debug.

Nginx scrive i record dei suoi eventi in due tipi di log: log di accesso (access logs) e log degli errori (error logs). I log di accesso scrivono informazioni sulle richieste del client e i log di errori scrivono informazioni sul server e sui problemi dell'applicazione.

Questo articolo illustra come configurare e leggere i log degli errori e di accesso di Nginx.

Se desideri configurare i log di accesso e i log di errore su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:

ssh [email protected]_DEL_SERVER

Successivamente sarà necessario inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:

ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:

ssh [email protected]_DEL_SERVER -p PORTA

Configurare i logs di accesso

Ogni volta che viene elaborata una richiesta client, Nginx genera un nuovo evento nel log di accesso. Ogni record di eventi contiene un timestamp e include varie informazioni sul client e sulla risorsa richiesta. I log di accesso possono mostrarti la posizione dei visitatori, la pagina che visitano, quanto tempo trascorrono sulla pagina e molto altro.

La direttiva log_format consente di definire il formato dei messaggi registrati. La direttiva access_log abilita e imposta la posizione del file log e il formato utilizzato.

La sintassi più elementare della direttiva access_log è la seguente:

access_log log_file log_format;

log_file è il percorso completo del file log e log_format è il formato utilizzato dal file log.

Il log di accesso può essere attivato sia in http, server o location blocco di direttive.

Per impostazione predefinita, il registro di accesso è abilitato a livello globale nella direttiva http all'interno del file di configurazione principale di Nginx /etc/nginx/nginx.conf:

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
}

Per una migliore leggibilità, si consiglia di impostare un file log di accesso separato per ciascun blocco server. La direttiva access_log stabilita nella direttiva server sostituisce quella stabilita nella direttiva http (livello superiore) /etc/nginx/conf.d/domain.com.conf:

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

  server {
    server_name domain.com
    access_log  /var/log/nginx/domain.access.log;
    ...
  }
}

Se non viene specificato alcun formato log, Nginx utilizza il formato combined (combinato) predefinito che assomiglia a questo:

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

Per modificare il formato di registrazione, sostituire l'impostazione predefinita o definirne una nuova. Ad esempio, per definire un nuovo formato di registrazione denominato custom (personalizzato) che estenderà il formato combined con il valore con intestazione X-Forwarded-For, aggiungere la seguente definizione nella direttiva http o server:

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

Per utilizzare il nuovo formato, specificare il nome dopo il file log come mostrato di seguito:

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

Mentre il log di accesso fornisce informazioni molto utili, occupano spazio su disco e può influire sulle prestazioni del server. Se il tuo server ha poche risorse e hai un sito Web occupato, potresti voler disabilitare il log di accesso. Per fare ciò, imposta il valore della direttiva access_log su off:

access_log  off;

Configurare il registro errori

Nginx scrive messaggi sull'applicazione e errori generali del server nel file di registro degli errori. Se si verificano errori nell'applicazione Web, il registro degli errori è il primo punto da cui iniziare per la risoluzione dei problemi.

La direttiva error_log abilita e imposta la posizione e il livello di gravità del registro errori. Essa ha la seguente forma e può essere impostata all'interno di un http, server o location blocco:

error_log log_file log_level

Il parametro log_level imposta il livello di registrazione. Di seguito sono elencati i livelli elencati per gravità (dal più basso al più alto):

  • debug - Messaggi di debug.
  • info - Messaggi informativi.
  • notice - Avvisi.
  • warn - Avvertenze.
  • error - Errori durante l'elaborazione di una richiesta.
  • crit- Problemi critici. Richiede un'azione rapida.
  • alert- Avvisi. È necessario agire immediatamente.
  • emerg- Situazione di emergenza. Il sistema è in uno stato inutilizzabile.

Ogni livello di log include i livelli più alti. Ad esempio, se si imposta il livello di log al warn, Nginx anche registrare i messaggi: error, crit, alert, e emerg.

Quando il parametro log_level non è specificato, per impostazione predefinita è error.

Per impostazione predefinita, la direttiva error_log è definita nella direttiva http all'interno del file principale /etc/nginx/nginx.conf:

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...
}

Come per i log di accesso, si consiglia di impostare un file di registro degli errori separato per ciascun blocco server, che sostituisce l'impostazione ereditata dai livelli superiori.

Ad esempio, per impostare il log degli errori sul dominio domain.com useresti warn:

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...

  server {
    server_name domain.com
    error_log  /var/log/nginx/domain.error.log warn;
    ...
  }
}

Ogni volta che si modifica il file di configurazione, è necessario riavviare il servizio Nginx per rendere effettive le modifiche.

Posizione dei file di registro

Di default sulla maggior parte delle distribuzioni Linux, come Ubuntu , CentOS e Debian, i log degli accessi e degli errori si trovano nella directory /var/log/nginx.

Lettura e comprensione dei file di registro di Nginx

È possibile aprire e analizzare i file di log utilizzando comandi standard come cat, less, grep, cut, awk, e così via.

Ecco un record di esempio dal file log di accesso che utilizza il formato di registro Nginx di combinazione predefinito:

192.168.22.1 - - [14/Oct/2019:22:11:36 +0000] "GET / HTTP/1.1" 200 396 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

Analizziamo cosa significa ogni campo del record:

  • $remote_addr - 192.168.22.1 - L'indirizzo IP del client che effettua la richiesta.
  • $remote_user - - - Utente autenticato HTTP. Quando il nome utente non è impostato, questo campo mostra -.
  • [$time_local] - [14/Oct/2019:22:11:36 +0000] - Ora del server locale.
  • "$request" - "GET / HTTP/1.1" - Tipo di richiesta, percorso e protocollo.
  • $status - 200 - Il codice di risposta del server.
  • $body_bytes_sent - 396 - La dimensione della risposta del server in byte.
  • "$http_referer" - "-" - L'URL del referral.
  • "$http_user_agent" - Mozilla/5.0 ... - L'agente utente del client (browser web).

Utilizzare il comando tail per guardare il file di registro in tempo reale:

tail -f  access.log 

Conclusione

I file logs forniscono informazioni utili sui problemi del server e su come i visitatori interagiscono con il tuo sito Web.

Nginx ti consente di configurare l'accesso e i log degli errori in base alle tue esigenze.