Sei sulla pagina 1di 6

La configurazione del server Web è la fase più importante del processo di attivazione di un servizio HTTP.

Gli amministratori del server Apache possono disporre di un gran numero di direttive per configurare in ogni
aspetto il più diffuso tra i server web

Installare e configurare Apache


Nonostante gli sforzi di Microsoft e Netscape, Apache continua a dominare il mercato dei server web, come
testimoniano le ultime indagini di Netcraft da cui risulta che circa il 55% dei server HTTP sono targati
Apache. I fattori principali che hanno contribuito al successo di Apache sono la disponibilità gratuita del
codice sorgente, la sua struttura modulare che lo rende estremamente versatile e la stabilità di esecuzione.
Apache viene distribuito anche in forma precompilata per diverse piattaforme Unix e, dalla release 1.3, è
disponibile anche per Windows; tuttavia le prestazioni ottenute su questa piattaforma sono al momento
inferiori a quelle per Unix.
La scelta dei moduli da compilare e la fase di configurazione del server HTTP, sono i punti più importanti del
processo di installazione di Apache perché da essi dipende la qualità e l’affidabilità del servizio offerto. In
questo articolo analizzeremo, pertanto, gli aspetti della compilazione e della configurazione del server web
Apache su piattaforma Unix. Vedremo anche quali sono le procedure da seguire per integrare un modulo
aggiuntivo nel codice binario del server.

Installazione di Apache

La versione più recente del server Apache è la 1.3.6. Presso il sito ufficiale http://www.apache.org è
disponibile sia il codice sorgente sia il codice binario compilato per alcune versioni di Unix e per Windows.Il
codice sorgente viene distribuito sotto forma di archivio tar compresso. Procuriamoci, dunque, una copia del
file apache_1.3.6.tar.gz ed eseguiamo il comando:

# gzip –dc apache_1.3.6.tar.gz | tar –C /usr/local –xvf –

In questo modo il codice sorgente verrà installato nella directory /usr/local/apache_1.3.6. Posizioniamoci in
tale directory ed esaminiamo gli aspetti della fase di compilazione del server HTTP Apache:

# cd /usr/local/apache_1.3.6

Informazioni esaustive sulle modalità di configurazione, sui moduli disponibili e sulla compilazione di Apache,
si trovano nel file INSTALL presente in questa directory. Apache mette a disposizione due modalità per la
personalizzazione dei Makefile. La prima possibilità è quella di modificare il file src/Configuration
selezionando i moduli che si desiderano installare e aggiungendo le istruzioni necessarie per l'inserimento
dei moduli di terze parti. Quindi si esegue lo script Configure.
La seconda possibilità, ed è la novità presente nelle versioni 1.3.x, consiste nell'utilizzare APACI (Apache
Autoconf-style Interface). Questa interfaccia è simile alla GNU autoconf e, a differenza del metodo
precedente, verranno generati i file di configurazione dell'attività del server Apache già personalizzati
secondo le indicazioni che abbiamo fornito da linea di comando. Inoltre, verranno creati anche alcuni utili
script per la gestione e manutenzione del server HTTP. Utilizzando questa procedura, il comando per la
generazione dei Makefile adattati al nostro sistema è il seguente:

# ./configure --prefix=/usr/local/httpd

L'opzione prefix=ServerRoot è molto importante perché rappresenta la posizione in cui il server HTTP si
inserisce nel filesystem. Tutti i file necessari per l'amministrazione del server HTTP, a meno di particolari
configurazioni da segnalare opportunamente all'avvio del server, risiedono in una posizione ad essa relativa.
Ciò detto, eseguiamo i comandi per la compilazione e l'installazione del server Apache:

# make
# make install

Alla fine dell'installazione, nella directory PREFIX/bin troveremo il programma httpd per la gestione del
servizio HTTP e alcuni script tra cui apachectl per l'avvio e la conclusione delle attività del daemon httpd.
Avendo usato lo script configure, i file di configurazione del server Apache sono già correttamente impostati
per quanto riguarda le opzioni generali di funzionamento. Pertanto, possiamo provare ad avviare il server
web con il comando
# PREFIX/bin/apachectl start

Selezionando in un web browser l'URL corrispondente al nome o all'IP della nostra macchina dovrebbe
comparire la pagina introduttiva di Apache recante la rassicurante frase "It Worked!" (Ha funzionato!). Se
qualcosa non ha funzionato correttamente durante la fase di inizializzazione del server, apparirà sullo
schermo il corrispondente messaggio d'errore. Tali informazioni vengono anche registrate nel file error_log
che, nel layout di default, è collocato nella directory PREFIX/logs.Interrompiamo, quindi, il funzionamento del
server con il comando

# PREFIX/bin/apachectl stop

Ovviamente, non è assolutamente necessario utilizzare lo script apachectl per gestire l'attività del server
Apache. Si può semplicemente invocare il programma httpd. Per la lista delle opzioni accettate da httpd
vedere la Tabella 1.

Configurazione di Apache
Le release di Apache precedenti la 1.3.4 utilizzavano tre file di configurazione: httpd.conf, srm.conf,
access.conf. Questa suddivisione era una reminiscenza delle origini di Apache dalle quali ci si è finalmente
affrancati e le numerose direttive sono oggi contenute nell'unico file httpd.conf che, per default, si trova nella
directory ServerRoot/conf. In realtà, il file di configurazione può avere un nome qualunque e occupare una
posizione qualsiasi nel filesystem, purché ne venga data comunicazione all'atto dell'avvio del daemon httpd
con l'opzione -f file-di-configurazione.
Il webmaster ha a disposizione circa 200 direttive per personalizzare in ogni aspetto il servizio HTTP. Tale
versatilità del server Apache è sicuramente uno dei suoi punti di forza, però è anche il punto in cui
l'amministratore alle prime armi viene travolto da un senso di smarrimento, oserei dire, kafkiano. In questa
sezione discuteremo le direttive più importanti presenti nel file httpd.conf. Accanto ad ogni direttiva viene
indicato tra parentesi il valore di default o i possibili valori assunti dalla direttiva. I percorsi relativi vengono
considerati a partire dalla directory ServerRoot.

 ServerType (standalone | inetd)

Il daemon httpd può essere avviato in modalità standalone oppure tramite inetd. In
quest'ultimo caso, si dovrà modificare opportunamente il file /etc/inetd.conf. La scelta di
gestire il servizio HTTP tramite inetd comporta un certo ritardo nella risposta alle richieste di
connessione perché, per ognuna di esse, deve essere avviato un processo httpd che
terminerà alla fine della connessione. Un tale comportamento può essere giustificato solo da
particolari motivi di sicurezza. Si deve pertanto preferire la modalità standalone. In questo
caso, qualora vengano fatte delle modifiche al file di configurazione, è necessario inviare un
segnale di SIGHUP al daemon httpd affinché venga reinizializzato. Si faccia attenzione alla
modalità di funzionamento del server Apache: al momento dell'avvio, il processo principale
genera una serie di processi figli deputati alla gestione del servizio HTTP. Il segnale di
SIGHUP va quindi inviato al processo padre.

 ServerRoot "directory" [/usr/local/httpd]

È la posizione in cui il server HTTP si inserisce nel filesystem. Può anche essere indicata
all’avvio del server con l’opzione –d ServerRoot.

 PidFile "filename" [logs/httpd.pid]

Viene indicata la posizione del file contenente il PID del processo principale httpd. Questa
direttiva è usata solo in modalità standalone.

 Port "Numero-Porta" [80]

È la porta utilizzata dal daemon httpd quando viene avviato in modalità standalone. Se il
server è stato avviato da inetd, allora sarà quest'ultimo a stare in ascolto sulla porta
specificata nel file /etc/services. Di solito, per il servizio HTTP, viene utilizzata la porta 80.Se
il server è stato avviato in modalità standalone, tramite la direttiva Listen si può fare in modo
che httpd stia in ascolto anche su più di una porta.

 User (utente | #numero_uid)

Group (gruppo | #numero_gid)

Tutte le richieste che giungono al server HTTP vengono considerate come se fossero
eseguite dall'utente indicato nella direttiva User. Per motivi di sicurezza è importante limitare
i privilegi di questo utente. Di solito, si usa l'utente e il gruppo nobody. Si può anche usare il
numero identificativo dell'utente e del gruppo purché siano preceduti dal simbolo #.

Per utilizzare queste direttive il server deve essere avviato in modalità standalone con i
permessi dell'utente root.

 ServerName "nome di dominio del server"

Con questa direttiva si assegna il nome di dominio del server web. Esempio:

ServerName www.nome.it

In questo modo si afferma che il nome del computer che offre il servizio HTTP è
www.nome.it, anche se il nome effettivo del computer è, per esempio, brutto.nome.it.

Il nome utilizzato (www.nome.it) deve però essere un dominio registrato in modo da poter
essere risolto dal DNS. La direttiva ServerName insieme a quella Port formano il nome
canonico del server HTTP. Se questa direttiva non viene utilizzata, verrà usato il nome di
dominio della macchina che offre il servizio web (nell'esempio: brutto.nome.it).

 DocumentRoot "directory" [htdocs]

È la directory contenente i documenti che verranno serviti dal server HTTP. La directory può
essere indicata con un percorso relativo (e in tal caso si farà riferimento a
ServerRoot/DocumentRoot) oppure assoluto. Per un difetto nel codice di mod_dir è
necessario che il percorso indicato non abbia la barra obliqua finale (ad esempio:
DocumentRoot /home/htdocs/ è un percorso non valido).

 UserDir "directory | (disabled | enabled) lista-utenti" [public_html]

Con questa direttiva si consente agli utenti di avere, all'interno dell'utenza personale, una
directory in cui collocare i propri documenti HTML. Se, ad esempio, il valore assegnato a
UserDir è public_html, i documenti presenti nella directory /home/nome_utente/public_html
saranno consultabili utilizzando l'URL http://hostname/~nome_utente. L'uso di questa
direttiva può causare problemi di sicurezza perché l'utente dispettoso può, ad esempio,
creare dei link simbolici a dei file che pur essendo leggibili da tutti gli utenti interni non si
vogliono, probabilmente, diffondere nella comunità Internet. Apache, comunque, mette a
disposizione del bravo webmaster gli strumenti necessari per evitare situazioni spiacevoli.
Possono essere inserite più direttive UserDir all'interno del file di configurazione. Usando

UserDir public_html
UserDir disabled root

si consente a tutti gli utenti tranne root di avere delle pagine HTML nella propria home
directory.

 DirectoryIndex "filename" [index.html]


Se il client richiede di accedere a una directory in cui è presente uno dei file indicati in
questa direttiva, allora anziché visualizzare l'elenco dei file contenuti nella directory verrà
mostrato il contenuto di tale file. È possibile indicare più di un nome, eventualmente anche
degli URL.

 Alias "directory-virtuale" "directory-reale"

ScriptAlias "directory-virtuale" "directory-reale"

Tramite queste direttive si consente al server httpd di accedere a documenti collocati al di


fuori di DocumentRoot. Ciò può essere utile per motivi di sicurezza o per facilitare l'accesso
ad alcune directory particolari. Entrambe le direttive possono essere ripetute più volte
all'interno del file di configurazione. La direttiva ScriptAlias si differenzia dalla direttiva Alias
perché i documenti nella "directory-reale" vengono trattati dal server come applicativi CGI
anziché come documenti da inviare al client.

Alias /icons/ "/usr/local/httpd/icons/"

La richiesta dell'URL http://hostname/icons/ viene tradotta dal server in


/usr/local/httpd/icons/.

 Directory, Files, Limit e Location

Queste direttive sono molto importanti perché tramite esse è possibile configurare Apache in
modo da ottenere le migliori prestazioni. Sono in realtà dei marcatori la cui sintassi è simile a
quella dell'HTML. Il tag di apertura conterrà anche l'indicazione della directory o dei file a cui
verranno applicate le direttive presenti in una lista che si conclude con il tag di chiusura.La
direttiva Directory può essere efficacemente usata per migliorare le prestazioni del server.La
direttiva Limit consente di dichiarare esplicitamente quali metodi del protocollo HTTP sono
applicabili al contenuto di una directory.

<Directory /docs>
<LIMIT GET>
order deny, allow
deny from all
allow from .try.to.do.it
</LIMIT>
</DIRECTORY>

In questo caso solo i client appartenenti al dominio try.to.do.it possono consultare i dati
contenuti nella directory /docs. Si osservi che qualora si voglia applicare un filtro sugli
accessi in base al dominio di appartenenza è necessario attivare la direttiva
HostnameLookups che, per default, è settata sul valore Off. Per non degradare le
prestazioni del server è però preferibile impostare l'autenticazione sugli indirizzi IP anziché
sul nome di dominio.

Compilazione di un modulo aggiuntivo

Come modulo da integrare nel server Apache abbiamo scelto PHP il cui codice sorgente, in forma di archivio
compresso, può essere prelevato dal sito http://www.php.net/download-php.php3. PHP (Professional Home
Page) è un linguaggio di programmazione interpretato che tramite l'uso di opportuni marcatori consente di
inserire i propri script all'interno delle pagine HTML. Tra i pregi di questo linguaggio abbiamo un'elevata
velocità di esecuzione, la possibilità di interfacciarsi a numerosi database (da Oracle a Mysql, da SQL server
di Microsoft a PostgreSQL, ecc.) e non ultimo il fatto che è "Open Source".
PHP può essere compilato come modulo di Apache oppure come applicativo CGI. In quest'ultimo caso si ha
un degradamento delle prestazioni globali perché il processo del server ha bisogno di creare un altro
processo (l'interprete PHP, appunto) per l'esecuzione del codice PHP, attendere che questo termini e poi
"girare" al client connesso il risultato dell'elaborazione. Integrando, invece, l'interprete PHP all'interno del
server HTTP, il file richiesto dal client viene elaborato direttamente all'interno del server senza effettuare
chiamate di sistema, riducendo così l'utilizzo delle risorse e ottimizzando i tempi di elaborazione. Nel nostro
esempio supporremo di compilare PHP come modulo per Apache. Installiamo, dunque, il codice sorgente
nella directory /usr/local e procediamo all’adattamento dei Makefile:

# gzip –dc php-3.0.7.tar.gz | tar –C /usr/local –xvf -


# cd /usr/local/php-3.0.7
# ./configure --with-apache=/usr/local/apache_1.3.6

L’opzione --with-apache ci consente di indicare esplicitamente la posizione in cui si trova il codice sorgente
di Apache dove, al termine della procedura di installazione, verranno copiati i file necessari per l’inclusione
del modulo PHP all’interno del server HTTP.
Alla fine dell'esecuzione dello script di configurazione verranno creati i Makefile adatti al nostro setup.
Procediamo, quindi con la compilazione e l'installazione dei file necessari nella directory di Apache:

# make
# make install
# cp php3.ini-dist /usr/local/lib/php3.ini

L’ultimo comando copia nella directory /usr/local/lib il file php3.ini che contiene le direttive per la
personalizzazione dell'interprete. Se PHP è stato compilato come modulo di Apache, tale file verrà letto solo
all'avvio del server HTTP.
A questo punto è necessario ripetere la procedura di compilazione di Apache e generare dei nuovi Makefile
contenenti le informazioni relative al modulo PHP che vogliamo installare. Spostiamoci, dunque, nella
directory contenente il codice sorgente di Apache ed eseguiamo lo script di configurazione:

# cd /usr/local/apache_1.3.6
# ./configure --prefix=/usr/local/httpd \
--disable-module=include \
--activate-module=src/modules/php3/libphp3.a

L'opzione --disable-module esclude dalla compilazione il modulo per l'interpretazione di documenti SSI
(Server Side Include). Questo modulo viene compilato per default. Nel nostro caso, avendo scelto di
utilizzare PHP, la presenza di mod_include è del tutto inutile.
L'opzione --activate-module=src/modules/file viene utilizzata per includere nella compilazione di Apache i
moduli costituiti da più di un file. Se il modulo da includere è costituito da un solo file, si utilizzerà l'opzione
--add-module=directory-del-modulo.c.
A questo punto siamo pronti per una nuova compilazione del server Apache che avvieremo con il comando
make.
Alla fine della compilazione nella directory src troveremo il file httpd che copieremo nella directory
PREFIX/bin non prima però di aver prudentemente rinominato il file PREFIX/bin/httpd del cui corretto
funzionamento siamo sicuri.

# mv /usr/local/httpd/bin/httpd /usr/local/httpd/bin/httpd.old
# cp /usr/local/apache_1.3.6/src/httpd /usr/local/httpd/bin/httpd

Prima di avviare il nuovo server HTTP dobbiamo modificare il file di configurazione ServerRoot/httpd.conf
introducendo la direttiva:

AddType "MIME-type" "estensione"

mediante la quale è possibile aggiungere dei tipi MIME senza modificare il contenuto del file mime.types.
Poiché abbiamo scelto di integrare nel server Apache il modulo PHP, l'uso di AddType ci torna utile per
comunicare al server HTTP di interpretare i documenti aventi l'estensione php e di inviare al client solo il
contenuto dell'elaborazione:

AddType application/x-httpd-php3 .php

Si può, poi, verificare la corretta installazione del modulo PHP, creando il file DocumentRoot/info.php
contenente il codice:

<?
phpinfo();
?>
Selezionando, quindi, in un web browser l’URL http://localhost/info.php, dovrebbe apparire una lunga pagina
informativa sullo stato del server HTTP e sul sistema operativo.

Prestazioni e potenza di calcolo


Apache è un server web progettato per essere robusto, affidabile, versatile e, in secondo luogo, per essere
veloce. La velocità, del resto, è un requisito che dipende da numerosi fattori, alcuni dei quali (come la banda
a disposizione per il servizio HTTP) non possono essere completamente previsti in fase di progettazione ma
che pure influiscono sulla qualità finale del servizio offerto. Il modello "Open Source", su cui si basa Apache,
è senz'altro la carta vincente nel campo dei server web perché consente di attuare un feed-back continuo tra
sviluppatori e utilizzatori. La stabilità del server Apache, frutto di questa intensa collaborazione, è un dato di
fatto confermato dal crescente numero di siti che utilizzano il suo codice. Siti con elevato traffico come
Yahoo!, Geocities e, strano a dirsi, Microsoft HotMail affidano i propri servizi al server Apache.
Un’approfondita conoscenza dei principi di funzionamento del server Apache e un corretto quadro della
situazione che si deve gestire consentono di raggiungere prestazioni eccellenti.

Conclusioni
Al di là degli indubbi meriti, Apache non è certamente uno strumento adatto a tutti. La configurazione e la
gestione del servizio HTTP viene fatta interamente da linea di comando e richiede una conoscenza
approfondita delle numerose direttive disponibili e familiarità con la sintassi da utilizzare. Ciò può essere
visto come un vantaggio, in quanto consente l'amministrazione dei servizi HTTP anche da terminali non
grafici, può, però, tradursi in un dispendio di energie (e di costi) qualora l'amministratore del servizio web non
abbia la necessaria familiarità con i principi di funzionamento del server Apache. Alcuni tool grafici per la
configurazione/gestione di Apache sono, comunque, in fase di sviluppo. Essendo un prodotto freeware,
l’assistenza offerta è legata alla disponibilità e buona volontà degli utenti della comunità Apache. Esistono,
tuttavia, numerose società che offrono assistenza per la configurazione del server Apache ed,
eventualmente, anche per la realizzazione di nuovi moduli.
Nonostante questi lievi difetti, Apache è un ottimo server HTTP e, visto che è gratis, vale senz’altro la pena
di farci un giro.

Bibliografia
[1] http://www.apache.org

Potrebbero piacerti anche