Principi di configurazione di Apache

Guida Apache
di Openskills

Introduzione alla configurazione di Apache
Tutta la configurazione di Apache può essere fatta operando con un editor di testi sul file httpd.conf che di trova in /usr/local/apache/conf/ oppure in /etc/httpd/conf/ o dove è stato specificato in fase di compilazione (provare un locate httpd.conf per trovarlo).
Alternativamente o in parallelo alla modifica manuale del file di configurazione si possono usare diversi strumenti di configurazione grafici, sia dedicati come Comanche o Apache Configuration di RedHat, che parte di più ampi strumenti grafici di configurazione del sistema come Linuxconf o Webmin.
Ogni riga nel file di configurazione di Apache può contenere o un # per indicare che segue un commento che non viene processato o una direttiva con cui definire le varie configurazioni.
Alcune direttive (Limit, LimitExcpet, Directory, DirectoryMatch, Files, FilesMatch, Location, LocationMatch, VirtualHost) definiscono un container, individuano cioè una directory, un dato tipo di file o, genericamente, un insieme di file per i quali si possono definire specifiche direttive.
Per esempio, per indicare che l'accesso a tutti i file nella directory /home/www/private è possibile solo da certi indirizzi si scrive:
<Directory /home/www/private> # Direttiva container Directory, con la quale si definisce una directory e tutto quello che vi è contenuto
order deny,allow # All'interno della directory definita si limita l'accesso secondo l'ordine indicato
deny from all # Viene negato l'accesso a tutti gli indirizzo allow from 10.0.0 # Viene permesso l'accesso agli indirizzi della rete 10.0.0.0/24
</Directory> # Il container Directory viene chiuso, le direttive che seguono non si applicano più a questa directory

Le direttive si dividono in diverse categorie, a seconda di dove possono essere usate nel file di configurazione: - Server-Level - Possono essere usate solo nella parte della configurazione che riguarda l'intero server, quindi non all'interno di container.
- Globali e locali - Possono essere usare sia a livello dell'intero server, definendo i comportamenti di default, che valgono per tutti i documenti, che all'interno di container, per gestire casi specifici e sostituire quanto definito al server-level.
- Solo locali - Possono essere usate solo all'interno di un container, in quanto non avrebbero senso nella configurazione generale.

Per impostare una configurazione di base servono alcune informazioni, che l'amministratore deve fornire: - Nome del server (può essere il nome effettivo della macchina o un nome arbitrario), si definisce con la direttiva ServerName
- La porta a cui mettere in listening il web server. Per il protocollo http la porta di default è l'80, ma volendo se ne può definire una alternativa. Si può inoltre definire a quale IP locale appoggiarsi (nel caso si stia usando una macchina con più IP). La direttiva raccomandata è Listen. Nella versione 1.3 di Apache vengono usate anche le direttive BindAddress e Port che però sono deprecate.
- L'utente e il gruppo con cui gira il processo httpd. E' meglio che siano utenti comuni non privilegiati (di solito "nobody" o "apache"). Per definirli si usano le direttive User e Group
- La directory che contiene i file HTML che fanno parte del sito che si vuole rendere pubblico con Apache. Si definisce con la direttiva DocumentRoot. Notare che questa è diversa dalla direttiva ServerRoot che definisce la directory di base di Apache, partendo dalla quale il programma cerca file di configurazione, log ecc.
- Se si usa un Apache con supporto dei moduli è probabile che solo il modulo di core mod_so sia effettivamente incluso nel binario httpd, per cui per poter funzionare Apache richiede il caricamento, tramite file di configurazione, degli altri moduli. Con Apache 2.0 basta la direttiva LoadModule, con Apache 1.3 ci vuole ANCHE la direttiva AddModule.
- Non è obbligatorio ma è prassi comune indicare l'indirizzo e-mail dell'amministratore del sistema, che può venir visualizzato in pagine di errore o altri casi. Lo si imposta con la direttiva ServerAdmin.

Un esempio di un file di configurazione minimale, senza caricamento di moduli, è quindi:
ServerName pippo
Listen 80
User apache
Group apache
DocumentRoot /home/httpd/html


Analisi di httpd.conf e settaggio parametri base
Il file httpd.conf è il file di configurazione principale di Apache. Ci sono veramente tante opzioni possibili da settare, ed è per questo che è importante fare spesso riferimento al manuale ufficiale, che offre una documentazione completa su Apache. Il seguente esempio di configurazione riporta una configurazione minima di Apache con commenti su ogni direttiva usata.
### Section 1: Global Environment
ServerType standalone

La direttiva ServerType specifica come Apache deve girare sul sistema. E' possibile farlo girare tramite il super daemon inetd (che invoca Apache quando riceve connessioni sulla porta 80) o come tramite server standalone, costantemente in esecuzione sul sistema. E' altamente raccomandabile questa seconda alternativa, per ridurre i tempi di latenza ed evitare i potenziali problemi che si possono avere invocando Apache da inetd.

ServerRoot "/etc/httpd"
Specifica la directory di base di Apache dove si trovano i file di configurazione e altri file importanti. Eventuali PATH di ulteriori directory, se non altrimenti specificato, sono relativi a questa directory.

PidFile /var/run/httpd.pid
Specifica dove viene scritto il PID di httpd quando si avvia. Questa opzione è richiesta solo quando Apache gira in standalone mode.

ResourceConfig /dev/null
Specifica la locazione del file srm.conf che Apache legge quando finisce di leggere il file di configurazione httpd.conf. Nelle versioni più recenti di Apache, viene tutto scritto in httpd.conf e non si usa più usare un file srm.conf separato. /dev/null, in questo caso indica che NON esiste un srm.conf separato.

AccessConfig /dev/null
L'opzione AccessConfig specifica la locazione del file access.conf, che Apache legge quando finisce di leggere il file di configurazione httpd.conf. Come sopra, impostando come argomento /dev/null non si specifica alcun file esterno per questa parte di configurazione (relativa ai permessi di accesso al web.

Timeout 300
Specifica il tempo di attesa massimo di Apache per le richieste (GET, POST, PUT). Su server a traffico normale si puo tranquillamente mantenere l'opzione di default, altrimenti può aver senso ridurla per liberare risorse più rapidamente.

KeepAlive On
L'opzione KeepAlive, se settata On, permette di usare, come da specifiche HTTP/1.1, la stessa connessione TCP per inviare più file. Per migliori performance è consigliato settarla On evitando che venga aperta una connessione TCP per ogni richiesta HTTP.

MaxKeepAliveRequests 100
Specifica il numero di richieste permesse per connessione (sempre che l'opzione KeepAlive venga settata On). Se questa opzione è settata a 0, una connessione rimane attiva e file continuano ad essere scambiati fino a quando non va in timeout.

KeepAliveTimeout 15
Specifica quanto tempo, in secondi, Apache deve attendere per una successiva richiesta prima di chiudere la connessione. Un valore di 15 secondi è molto buono (parlando sempre di performance di Apache).

MinSpareServers 16
Specifica il numero minimo di processi figli in attesa di ricevere una richiesta. Apache, fa uno spawn di nuovi figli, mano a mano che quelli esistenti vengono occupati da nuove richieste. Dal momento che l'operazione di spawning non è rapidissima, questa opzione è molto importante per quanto riquarda le performance di Apache. Per un server che deve gestire un numero medio alto di accessi, 16 è il valore piu usato.

MaxSpareServers 64
Specifica il numero massimo di processi figli in attesa di ricevere una richiesta, un valore alto permette ad Apache di rispondere più rapidamente a picchi di traffico, ma occupa maggiormente le risorse del sistema. Per un server che deve gestire un numero medio alto di accessi, 64 è il valore piu usato.

StartServers 16
Specifica il numero di processi figli che devono essere creati da Apache in start-up. Anche questo è un parametro importante per quanto riguarda le performance di Apache. Per un server che deve gestire un numero medio alto di accessi ha senso aumentare questo valore.

MaxClients 256
Specifica il numero massimo di richieste simultanee che Apache può supportare. Anche questo parametro è fondamentale per il discorso performance. Considerare che nella compilazione di default di Apache, questo parametro non può superare 256.

MaxRequestsPerChild 100000
Specifica il numero di richieste che un singolo processo figlio può gestire. Con 0 si indica un numero infinito, ma per evitare un potenziale degradamento del sistema è utile mettere un numero alto ma finito.

### Section 2: 'Main' server configuration
Port 80

Indica la porta TCP su cui Apache deve ascolare. 80 è la porta di default per un server http. Questa direttiva, insieme a BindAddress, che indica l'IP su cui ascoltare, è destinata ad essere soppiantata dalla più flessibile Listen

Listen *:80
Indica di ascoltare su tutti gli IP locali sulla porta 80. Si possono specificare anche singoli indirizzi e più righe con diversi IP e porte in Listen

User nobody
Lo user con cui Apache gira. E' importante creare un nuovo utente con i minimi permessi usati allo scopo di far girare il servizio. Notare che Apache avrà, nell'accesso al file system locale, i privilegi dell'utente qui specificato.

Group nobody
Il gruppo con cui Apache gira.

DirectoryIndex index.htm index.html index.php index.php3 default.html index.cgi
Specifica i nomi di file che Apache considera come home page. In altre parole, se viene fatta una GET che non specifica il nome di un file specifico ma solo la directory (quello che succede abitualmente, quando su un browser si indica un indirizzo tipo http://www.yahoo.com) Apache cerca, nell'ordine indicato, i file sopra citati e se non ne trova alcuni visualizza, se questo è permesso nel resto della configurazione, l'elenco dei file contenuti della directory

Include conf/virtual-domains.conf
Specifica la posizione di altri files che si possono includere insieme al file di configurazione httpd.conf. In questo caso è stato incluso il file virtual-domains.conf, contenuto nella directory /etc/httpd/conf.

HostnameLookups Off
Questa opzione, se settata off, specifica di disabilitare il DNS reverse lookup degli IP dei client in fase di logging. Per evitare tempi di latenza eccessivi, è consigliabile lasciare Off la risoluzione degli IP, che potrà essere fatta successivamente e autonomamente da strumenti di analisi dei log.

ServerAdmin admin@domain.com
L'indirizzo email di chi amministra il server. Può essere indicato in alcune pagine di errore

ServerName www.domain.com
Il nome del server web

DocumentRoot "/home/httpd/folder"
La directory dove sono contenuti i file html che costituiscono il sito offerto dal server
<Directory "/home/httpd/folder">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Si definisce un container Directory, al cui interno si impostano delle direttive limitate agli oggetti ivi contenuti

<Files .pl>
Options None
AllowOverride None
Order deny,allow
Deny from all
</Files>

Altro esempio di container. Qui si impedisce la lettura di tutti i file .pl

<IfModule mod_mime.c>
TypesConfig /etc/httpd/conf/mime.types
</IfModule>

Indica di caricare il file specificato con l'elenco dei MIME file type, se è presente il modulo mod_mime, in grado di gestirli.

DefaultType text/plain
Indica con quale MIME type il server web fornisce i suoi file

ErrorLog /var/log/httpd/error_log
LogLevel warn

La posizione del file di log per quanto riguarda gli errori, e il livello di debugging

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/httpd/access_log combined

Si definisce il formato di un file di log (per quanto riguarda le richieste HTTP), lo si chiama "combined" e, con la direttiva CustomLog si definisce dove scriverlo.

<IfModule mod_alias.c>
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
<Directory "/home/httpd/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
</IfModule>

Se è presente il modulo mod_alias si definisce un alias per una directory che contiene script CGI e si impostano direttive specifiche per quella directory

ErrorDocument 500 "The server made a boo boo.
ErrorDocument 404 http://192.168.1.1/error.htm
ErrorDocument 403 "Access Forbidden -- Go away.

Definisce come reagire in caso di errore, a seconda del codice di errore. Si può visualizzare una scritta, aprire un file html locale o puntare ad un URL remoto

<IfModule mod_setenvif.c>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
</IfModule>

Se è presente il modulo mod_setenvif, si impostano specifici header di risposta per richieste effettuati da specifici Browser

Configurare Apache con Linuxconf
Linuxconf è un tool che permette di amministrare il proprio sistema Linux in maniera abbastanza semplice ed intuitiva, e di conseguenza, poter configurare con facilità il web server Apache.
Per configurare Apache aprire linuxconf ed andare sotto Config => Networking => Server Tasks => Apache Web Server. Si troveranno 3 opzioni disponibili:
Defaults: sotto questo menu ci sono 4 sotto categorie.
Administrator e-mail, che non è altro che la mail dell'amministratore del server, server name che è il nome del server, document root che è la cartella che contiene tutti i files che dovranno essere processati da Apache (praticamente le pagine web), features che permetterà di settare altri parametri "minori" (possibilita' di leggere files .shtml ecc...).
Virtual Domains: Sotto questo menu è possibile configurare una delle features piu importanti di Apache, ossia configurare su la stessa macchina più domini virtuali, ognuno con il suo nome ed, eventualmente, IP.
Sub-directory specs: Da qui è possibile settare alcuni parametri limitatamente a determinate directory.

Link: Linuxconf Home Page - http://www.solucorp.qc.ca/linuxconf

Apache configuration tool (Red Hat)
Per la configurazione facile di Apache, Red Hat Linux ha un tool che permette tramite interfaccia grafica la configurazione del file /etc/httpd/conf/httpd.conf, dando la possibilita di settare parametri come virtual hosts, numero massimo di connessioni, filtri di logging ecc...
Per utilizzarlo serve l'ambiente di lavoro grafico X Windows ed i permessi di root. E' suddiviso in svariate sezioni:
Main: da qui è possibile inserire il nome del dominio, l'e-mail del webmaster, la porta dalla quale "ascoltare" e gli indirizzi accettati (disponibile l'opzione "listen to all adress").
Virtual hosts: da qui è possibile aggiungere virtual host, ossia aggiungere piu domini, server per diversi IP e porte sulla stessa macchina.
Server: da qui è possibile settare i parametri del server web quali lock file, PID file, directory root, user e gruppo di Apache.
Performance tuning: da qui è possibile settare alcuni parametri come numero massimo di connessioni, tempo di timeout, richieste massime per connessioni ecc...
Altra sezione importante è Default settings, dalla quale è possibile settare homepage, pagine dove deviare gli utenti in funzione dell'errore (page not found, bad request ecc...), file di log per processi, errori ecc...
Attenzione: se si usa questo tool per configurare Apache non editare manualmente il file /etc/httpd/conf/httpd.conf. Se si aggiungono nuovi moduli ad Apache, non saranno supportati da questo tool, e non si potrà più configurare Apache in questo modo.

Per avviare Apache configuration tool:
Su desktop GNOME main menu=>Programs=>System=>Apache configuration; Su desktop KDE main menu=>System=>Apache configuration;
Oppure da shell lanciando il comando apacheconf.

Configurare Apache con Comanche
Comanche è un tool grafico open-source per la configurazione di Apache.
E' multi piattaforma, ossia gira su molti dei sistemi operativi Unix-based (compreso Linux) e anche su Windows. Permette tramite interfaccia grafica la configurazione del file httpd.conf, dando la possibilità di settare tutti i parametri presenti nel file di configurazione di Apache. A differenza del tool di Red Hat, Comanche permette di editare manualmente il file httpd.conf senza dare problemi (in automatico rileva le modifiche apportate e si aggiorna) e da la possibilità di aggiungere a piacimento moduli per Apache. Per l'installazione basta downloadare il .tar.gz, che contiene il binario e tutto quello che serve per farlo funzionare. Una volta lanciato bisogna giusto specificargli dove può trovare i files di Apache. Altra cosa potenzialmente utile è il supporto multilingue.

Link: Comanche Home Page - http://www.comance.org

Configurare Apache con Comanche
Webmin è un potente strumento di configurazione web-based che permette, attraverso un interfaccia web user-friendly ed una struttura a moduli espandibile, di poter amministrare praticamente l'intero sistema, quindi anche la configurazione di Apache.
Permette la configurazione del file httpd.conf, dando la possibilità di settare tutti i parametri presenti nel file di configurazione di Apache (virtual hosts, indirizzi, max request, file di log ecc...).
Anche a livello didattico può essere molto utile, in quanto l'interfaccia grafica è molto ben fatta ed assai intuitiva, permettendo perciò anche ai meno esperti di poter configurare Apache senza incappare in grossi dilemmi.

Link: Webmin Home Page - http://www.webmin.com

Si ringrazia Openskills per
la realizzazione della guida


© Risorse.net (www.risorse.net)
pagina in versione stampabile:
http://www.risorse.net /apache/principi_apache.asp?print=ok