Introduzione

Apache è un server HTTP open source e multipiattaforma. Ha molte potenti funzionalità che possono essere estese da un'ampia varietà di moduli. Durante la gestione dei server Web Apache, una delle attività più frequenti che eseguirai è la verifica dei file di registro (logs).

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

Apache scrive i record dei suoi eventi in due tipi di log: log di accesso e log degli errori. I registri di accesso includono informazioni sulle richieste del client e informazioni sui registri degli errori relative al server e ai problemi dell'applicazione.

Questo articolo descrive come configurare e leggere i log degli errori e di accesso di Apache.

Se desideri abilitare i file Apache Error Log e Access Log 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 log di accesso

Il server web Apache genera un nuovo evento nel registro di accesso per tutte le richieste elaborate. Ogni record di eventi contiene un timestamp e include varie informazioni sul client e sulla risorsa richiesta. I registri di accesso mostrano la posizione dei visitatori, la pagina che visitano, quanto tempo trascorrono sulla pagina e molto altro.

La direttiva CustomLog definisce la posizione del file di registro e il formato dei messaggi registrati.

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

CustomLog log_file format [condition];

Il parametro Log_file può essere sia relativamente al ServerRoot o un percorso completo del file di log. I messaggi di registro possono anche essere reindirizzati a un altro programma usando il simbolo pipe |.

Il secondo argomento, format specifica il formato dei messaggi di registro. Può essere una definizione di formato esplicita o un soprannome definito dalla direttiva LogFormat.

LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access.log combined
CustomLog logs/access.log "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""

Per evitare di ripetere più volte lo stesso codice, preferisci definire la direttiva LogFormat e usarla come nickname nella direttiva CustomLog.

Per un elenco completo di tutte le stringhe e modificatori di formato, consultare la documentazione del modulo mod_log_config.

Il terzo argomento [condition] è facoltativo e consente di scrivere messaggi di registro solo quando viene soddisfatta una condizione specifica. Di solito, questo viene fatto usando le variabili di ambiente. La condizione può essere annullata con simbolo il !.

Ad esempio, se si desidera escludere richieste di file CSS da scrivere nel file di registro, utilizzare quanto segue:

SetEnvIf Request_URI \.css$ css-file
CustomLog logs/access.log custom env=!css-file

Per modificare il formato di registrazione, è possibile definire una nuova direttiva LogFormat o sovrascrivere il formato predefinito. In genere è meglio definire un nuovo formato.

Mentre il registro di accesso fornisce informazioni molto utili, occupa 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ò, è sufficiente commentare o rimuovere la direttiva CustomLog dalla configurazione del server principale e dalle sezioni del server virtuale.

Se si desidera disattivare il log di accesso solo per un host virtuale, impostare il primo argomento della direttiva CustomLog su /dev/null:

CustomLog /dev/null combined

Configurare il log di errori

Apache scrive messaggi sull'applicazione e errori generali del server nel file di log 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 ErrorLog definisce la posizione del nome del registro errori. Prende la forma seguente:

ErrorLog log_file

Se il percorso verso log_file non è assoluto, viene impostato come relativo a ServerRoot. I messaggi di errore possono anche essere inviati a un altro programma usando il simbolo pipe |.

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

  • trace1- trace8- Traccia messaggi.
  • 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 registro include i livelli più alti. Ad esempio, se si imposta il livello di log di warn, Apache scrive anche i messaggi error, crit, alert, e emerg.

Quando il parametro LogLevel non è specificato, per impostazione predefinita è warn. Si consiglia di impostare almeno il livello crit.

La direttiva ErrorLogFormat specifica il formato del  file log error di apache. Sulla maggior parte delle distribuzioni Linux, il server Apache utilizza il formato predefinito, che è sufficiente per la maggior parte dei casi.

Host virtuali e log globale

Il comportamento della registrazione e la posizione dei file possono essere impostati a livello globale o per base di host virtuale.

Quindi le direttive CustomLog o ErrorLog vengono impostate nel contesto del server principale, il server scrive tutti i messaggi di registro negli stessi file di registro di accesso e di errore. Altrimenti, se le direttive vengono inserite in un blocco <VirtualHost>, solo i messaggi di registro per quell'host virtuale vengono scritti nel file specificato.

La direttiva log impostata nel blocco <VirtualHost> sovrascrive quella impostata nel contesto del server.

Gli host virtuali senza CustomLog o le direttive ErrorLog avranno i loro messaggi di log scritti nei log del server globale.

Per una migliore leggibilità, si consiglia di impostare file di registro degli errori e di accesso separati per ciascun host virtuale. Ecco un esempio:

<VirtualHost *:80>
     ServerName esempio.it
     ServerAlias www.esempio.it
     ServerAdmin [email protected]
     DocumentRoot /var/www/esempio.it/public
     LogLevel warn
     ErrorLog /var/www/esempio.it/logs/error.log
     CustomLog /var/www/esempio.it/logs/access.log combined
</VirtualHost>

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

Posizione dei file logs

Di default su distribuzioni basate su Debian come Ubuntu, i log degli accessi e degli errori si trovano nella directory /var/log/apache2. Su CentOS i file di registro sono collocati nella directory /var/log/httpd.

Lettura e comprensione dei file logs di Apache

I file di log possono essere aperti e analizzati utilizzando comandi standard come cat, less, grep, cut, awk, e così via.

Ecco un record di esempio dal file di registro di accesso che utilizza il formato combine di registro di Debian :

192.168.22.22 - - [26/Jan/2020:20:19:02 +0000] "GET / HTTP/1.1" 200 6169 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"

Analizziamo cosa significa ogni campo del record:

  • %h - 192.168.22.22 - Il nome host o l'indirizzo IP del client che effettua la richiesta.
  • %l- - - Nome registro remoto. Quando il nome utente non è impostato, questo campo mostra -.
  • %u - - - Se la richiesta è autenticata, viene visualizzato il nome utente remoto.
  • %t- [26/Jan/2020:20:19:02 +0000] - Ora del server locale.
  • \"%r\" - "GET / HTTP/1.1" - Prima riga della richiesta. Tipo, percorso e protocollo di richiesta.
  • %>s - 200 - Il codice di risposta del server finale. Se il simbolo > non viene utilizzato e la richiesta è stata reindirizzata internamente, mostrerà lo stato della richiesta originale.
  • %O - 396 - La dimensione della risposta del server in byte.
  • \"%{Referer}i\" - "-" - L'URL del referral.
  • \"%{User-Agent}i\" - 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.

Apache ha un sistema di registrazione molto configurabile che consente di personalizzare l'accesso e i registri degli errori in base alle proprie esigenze.