Apache è probabilmente il web server più usato sul web. Pur essendo free ed open-source, Apache è utilizzato soprattutto in ambienti enterprise (ovvero professionali e aziendali), grazie alla sua robustezza, sicurezza ed affidabilità. Abbiamo già visto quali sono i files di configurazione di Apache: è giunto il momento di entrare nei dettagli per capire come possiamo modificare il comportamento del web server.

Prima di entrare nel vivo della questione, vale la pena riassumere brevemente la storia di Apache: questo ci aiuterà ad orientarci tra i nomi dei files che dobbiamo maneggiare. Sin dalle prime versioni, il processo core di Apache ha avuto nome httpd, o httpd.exe. E' per questo motivo che, ancora oggi, il file di configurazione storico per eccellenza si chiama httpd.conf. Si potrebbe pensare, erroneamente, che questo nome non è più usato, ma non è vero: tutto dipende da come e dove installiamo apache. Consideriamo come esempio l'installazione di Apache su Windows. Se eseguiamo Apache e controlliamo i processi in esecuzione col Task Manager, vedremo che il processo principale di Apache si chiama apache.exe se usiamo EasyPHP, mentre si chiama httpd.exe se usiamo XAMPP.

Un mimino di conoscenza dell'architettura di Apache è utile per capire meglio il significato delle direttive contenute nel file di configurazione. Ad esempio, quando riavviamo Apache, di solito vengono chiusi tutti i processi associati ad un listner HTTP, ma il programma “vero e proprio” (ad esempio httpd.exe) non viene arrestato: in linea di massima riavviare il server è perciò diverso dal fermarlo completamente per riavviarlo in un secondo momento. Ricordiamocene in caso di dubbio, potrebbe tornarci comodo.

A seconda dell'installazione, il file che ci interessa potrebbe chiamarsi apache2.conf o httpd.conf, come discusso qui. In ogni caso, qualsiasi sia il nome del file, la modalità di configurazione sono praticamente le stesse. Andiamo adesso a vedere quali sono le direttive più importanti.

ServerRoot

La directory di installazione di Apache. A rigore il programma vero e proprio potrebbe trovarsi altrove, ma all'interno della ServerRoot dovremmo trovare sempre i files di configurazione e i files di log.

Listen

Di solito viene usata solo per cambiare la porta HTTP di ascolto del server. La direttiva Listen permette però anche di specificare uno o più indirizzi IP: in tal caso il server può essere configurato per rispondere solo alle chiamate indirizzate verso quell'indirizzo. Questo può tornare utile in locale: scrivendo ad esempio

Listen 127.0.0.1:80

il nostro Apache locale risponderà alle richieste sulla porta 80 (comportamento standard), ma solamente se provenienti dalla nostra macchina (127.0.0.1 sta per localhost). Con questo semplice accorgimento evitiamo che altri utenti in rete vedano il nostro lavoro.

LoadModule e IfModule

Questa sezione abbastanza lunga (di solito contiene un centinaio di righe) riguarda il caricamento dinamico dei moduli (DSO: Dynamic Shared Object). Si tratta di funzionalità avanzate che meritano un trattamento a parte, per cui rimandiamo alla documentazione di Apache.

Main Server

E' la sezione più importante del file. Le direttive specificate in questa sezione valgono per il server principale, e vengono ereditate da tutti gli eventuali Virtual Host. In altre parole qui specifichiamo il comportamento di default di Apache, e decidiamo anche sotto quali condizioni tale comportamento può (o non può) essere personalizzato dai siti o host virtuali del server. Per questo motivo è quasi indispensabile conoscere almeno le principali direttive della sezione Main Server: anche se non dovessimo mai configurare un web server Apache in qualità di amministratori, prima o poi potrebbe capitarci di dover creare un file .htaccess per una particolare web application deployata su Apache. In tal caso ricordiamoci che tutte le direttive del Main Server possono essere specificate all'interno del nostro .htaccess. Le direttive più utili dovrebbero essere

  • DocumentRoot: specifica il percorso della directory htdocs o www, dove andranno deployati i siti gestiti dal server principale
  • Directory: è probabilmente la direttiva più importante. In genere si hanno più direttive di questo tipo: una per la configurazione del server principale, una per ogni eventuale sito sotto la root del server principale e una per ogni eventuale virtual host. Particolare importanza riveste l'attributo AllowOverride, che indica se altri files di configurazione (ad esempio .htaccess) possono o non possono personalizzare gli attributi di questa direttiva
  • FilesMatch: permette di indicare comportamenti specifici per un ben preciso file o gruppo di files. L'uso più banale della direttiva è quella di impedire che i files .htacccess, solitamente presenti nella root di un sito, siano visibili da un client HTTP (i.e. il browser)
  • ErrorLog: ci dice dove trovare il file di log del server. Utile soprattutto per indirizzare il log nella directory che più ci piace
  • LogLevel: il livello di verbosità del log di Apache. Può tornare utile se nel log non troviamo le informazioni che cerchiamo, o ne troviamo troppe. Il valore di default dovrebbe essere warn (warning, cioè avvertenza); se necessario possiamo impostarlo su debug, info, notice, error, crit, alert ed emerg. Se il LogLevel è troppo verboso (ad esempio debug o info) nel file di log troveremo tutte le informazioni possibili, forse troppe. Se il LogLevel è troppo alto (ad esempio error o crit) nel file di log troveremo solo gli errori gravi. In linea di massima è bene tenere il log abbastanza verboso se abbiamo spazio sul disco, e alzarlo solamente se vogliamo ridurre la dimensione dei files di log.

Con questo abbiamo concluso la panoramica sui principali parametri del file httpd.conf. Tra le direttive più importanti, quella che probabilmente merita di essere approfondita è <Directory>, perché può capitare di usarla in molti contesti diversi. Vale la pena dare un'occhiata alla documentazione ufficiale di Apache, disponibile qui.