**** L' INDIANO ED IL PINGUINO

**** La configurazione del Web Server Apache alla portata di tutti

Ivan Fabris 

Sorpresi? L'indiano in questione è il Web Server Apache, e questo mese vedremo come configurarlo in modo da poterci fare qualcosa di utile: dopotutto se abbiamo deciso di usare Linux invece che win dovremo pur approfittare delle tante possibilità in più che ci vengono offerte! Apache è è il server http più popolare in rete, ed è disponibile in formato binario in tutte le distribuzioni, mentre i sorgenti li potete trovare su http://www.apache.org . 
** Installazione
Eseguite il comando "which httpd". Se vi risponde con "/usr/sbin/httpd" o qualcosa di simile, allora il server Apache è già installato nel vostro sistema, altrimenti inserite il cd della vostra distribuzione nel lettore, montate il filesystem e posizionatevi nella directory in cui si trovano i pacchetti ( usualmente RedHat/RPMS per le distribuzioni RedHat e Mandrake, oppure /suse/n1 per la SUSE ) ed installate il pacchetto della versione che possedete, con rpm -i apache-numero_di_versione.rpm. Il cd di PCAction in ogni caso contiene l' ultima versione, che nel momento in cui scrivo è la 1.3.9. Una volta installato il pacchetto, troverete in /home una nuova directory, /home/httpd, che è la root dir in cui scriverete i file html da mostrare al mondo intero. In questa dir si trovano già alcuni file di esempio ed il manuale online di Apache. I file di configurazione verranno invece installati in /etc/httpd, e i file di aiuto in /usr/doc. Potete anche scaricare i sorgenti dalla home page di Apache, e compilarli al solito modo: 1) "starare" i file, 2) lanciare lo script di configurazione con l' opzione  --help per vedere quali sono le possibilità che vi interessano, 3) configurare di conseguenza ed infine compilare ed installare; tutto questo se desiderate particolari caratteristiche tipo l'integrazione proxy, ma queste funzioni avanzate esulano dallo scopo di questo articolo: a noi serve un server web dignitoso e sicuro, e facile da configurare, per cui procediamo

** La configurazione
Il file di configurazione di Apache è /etc/httpd/conf/httpd.conf. Gli altri due file, srm.conf e access.conf sono stati assorbiti nel primo ed il loro uso è ormai obsoleto e sconsigliato nelle ultime release del server. Per modificare questo file ci sono tre modi: editor testuale, linuxconf oppure comanche, un programma fatto apposta per configurare apache; i tre metodi sostanzialmente si equivalgono, comanche è più bello da vedere, linuxconf ( rete/Apache web server ) è un po' più criptico ma ugualmente efficace, e l'editing manuale è come al solito il più efficace... strano come efficacia moltiplicato facilità d'uso dia una costante... comunque qualunque strumento si usi, le opzioni da configurare sono sempre le stesse:

* Configurazione di base
ServerType	standalone		Questa direttiva stabilisce il modo di avvio del server, manuale, come in questo caso, oppure dipendente dal superdemone inetd, usando l' opzione inetd al posto di standalone; la differenza è che nel primo modo il server lo controllate voi, con tutti gli svantaggi del carico sul sistema, mentre con inetd viene attivato solo quando provengono richieste http dalla porta 80, ma i tempi di risposta sono maggiori. Inoltre se usate inetd dovete aggiungere in /etc/inetd.conf la linea 
http   stream  tcp     nowait    nobody    /usr/sbin/tcpd	httpd /etc/httpd/conf/httpd.conf
 
Port 80		Questa è la porta standard per http

Le prossime sono le configurazioni per le prestazioni del server: Apache si adatta dinamicamente alle richieste esterne, fino a dei limiti che voi fissate dipendentemente dalle risorse del vostro sistema: per un computer casalingo i parametri indicati vanno più che bene
StartServers 10	Numero massimo di server in funzione contemporaneamente, esclusi i sever momentanei
MinSpareServers 2	Quantità di server di riserva per fronteggiare carichi momentanei, come più richieste da uno stesso browser
MaxSpareServers 5	Massimo delle richieste da un singolo client
MaxClient 15		Numero massimo di server che possono essere attivati... è il numero massimo di utenti che possono usare il server contemporaneamente 
KeepAliveTimeout 120	Numero massimo di secondi di attesa tra due richieste dallo stesso browser, dopodiché l'istanza del server muore ed il client viene disconnesso
MaxKeepAliveRequests 100	Il numero massimo di richieste consecutive da un singolo browser, 0=infinite, questo numero dovrebbe essere tenuto piuttosto alto
 Timeout 60		Il tempo dopo il quale una connessione attiva viene disattivata, questo evita al server di seguire per troppo tempo una cattiva connessione.

ServerRoot /etc/httpd	La directory dove vengono conservati i file di configurazione e i log degli accessi e degli errori
HostNameLookups off	Stabilisce se nei log vanno conservati i numeri ip ( off  ) o se si preferiscono i nomi corrispondenti ( on )

*Moduli
Servono ad estendere le funzioni di apache, e solitamente sono in file separati, per una maggiore flessibilità e leggerezza dell'eseguibile. Sono disponibili molti moduli, una lista completa la trovate nel manuale online di Apache ed all'indirizzo http://modules.apache.org
LoadModule status_module modules/mod_status.so 	Carica il modulo scelto, reperibile al percorso indicato

ServerAdmin i.fabris@fo.nettuno.it 		L'indirizzo email che viene mostrato per esempio quando si fa riferimento ad una pagina inesistente, a cui riferire eventuali problemi.
ServerName 		Se la vostra Linuxbox ha un nome diverso da localhost.localdomain, e questo non è registrato in /etc/hosts, assegnate a questa variabileiol nome della vostra macchina... non aspettatevi però di essere individuabili in internet tramite quel nome, se non è registrato al NIS ed associato al vostro ip attuale: il vostro server potrà essere raggiunto tramite il vostro numero ip corrente

* Configurazione dello spazio web
DocumentRoot /home/httpd/html	La directory radice in cui sistemare le nostre pagine html, nel caso che sia abilita l'opzione FollowSymLink sarà possibile uscirne e vagare in ogni punto del nostro hd

ErrorLog 	logs/error_log
TransferLog 	logs/access_log
AgentLog 	logs/browser_log     
I log degli errori, degli accessi e dei tipi di browser che usano il nostro server; il path si riferisce a sottodirectory di ServeRoot, a meno che non siano precedute da /

User nobody
Group nobody
Il server viene lanciato da root ma viene subito declassato all'utente ed al gruppo indicati, che hanno privilegi minimi. Ogni azione successiva del server, come la lettura di file html, l'esecuzione di cgi,ecc. viene eseguita con i diritti di user:group, che devono esistere nel vostro sistema

*Direttive 	
-Options Consente di impostare alcune variabili di livello globale o riferite solo a particolari ambienti,per un controllo raffinato degli accessi al server ed alle sue varie zone: per esempio si può bloccare una sottodirectory a certi utenti, oppure consentire l'esecuzione di programmi cgi. Le parole chiave ammesse sono
None	Disabilita tutte le opzioni	
All	Abilita tutte le opzioni, esclusa la MultiViews. All e None sono reciprocamente esclusive e non possono essere usate assieme
FollowSymLinks 	Se specificata, consente al browser di seguire i link simbolici anche al di fuori della directory radice.
ExecCGI	Consente di eseguire i programmi cgi
Indexes	Consente di ottenere il listato dei file nella directory, potete abilitarlo ed aggiungere FancyIndexing on in modo da avere un listato dei file più allegro. Se non è abilitato una URL che termina con una / causerà errore ( se invece in quella dir è presente uno dei file listati in DirectoryIndex, esso verrà visualizzato )
Includes	I Server Side Include sono permessi
IncludesNOEXEC	Come sopra, ma i comandi #exec e #include dei cgi sono disabilitati
MultiViews 	Abilita esplicitamente il MultiViews ( Fate come se non esistesse )
SymLinksIfOwnerMatch 	Il server seguirà un link simbolico solo se il proprietario link è lo stesso del file o directory di destinazione
Queste parole chiave possono essere escluse e sommate con gli operatori + e - , in modo da controllare il comportamento di un ramo di directory, usando la direttiva Directory ( e ce ne sono molte altre ), che racchiude un gruppo di istruzioni specifiche per quel ramo 
<Directory /home/httpd/html>
      Options Indexes ExecCGI
</Directory>
<Directory /home/httpd/html/doc> 
      Options +Includes -Indexes
</Directory> 
in questo esempio la direttiva Indexes avrà effetto in /home/httpd/html ed in tutte le sue sottodirectory esclusa doc, ove invece sarà abilitata Incluse, mentre ExecCGI avrà effetto su tutto il ramo. 

*Misc
UserDir public_html		Se decidiamo di mettere alcune pagine nel nostro spazio utente, possiamo definirne il percorso in questo modo. Così quando un browser ci invierà una richiesta del tipo http://numero_ip/~nome_utente/ le pagine verranno cercate in /home/nome_utente/public_html/ invece che in /home/httpd/html/

DirectoryIndex index.html index.htm index.shtml index.cgi  Default.htm default.htm  	Questi sono i nomi dei file di default, verranno caricati se la URL termina con un /. Per esempio, le URL http://nome_host/dir/  http://nome_host/dir/index.htm sono equivalenti, se in dir esiste il file index.htm

FancyIndexing on	Con FancyIndexing avremo un listato dei file con allegre icone anziché in plain text. Le icone le possiamo stabilire noi agendo sulla sezione successiva con le direttive AddIconByEncoding, AddIconByType, AddIcon e DefaultIcon

AccessFileName .htaccess	Possiamo mettere in ogni sottodirectory un file .htaccess con dentro le direttive di accesso a quella directory

Alias nuovo_nome vecchio_nome 	Se vogliamo risparmiare tempo quando scriviamo, possiamo assegnare un percorso ad una variabile. 

A dire il vero ci sarebbero ancora decine di opzioni e di parole chiave da analizzare, basta dare un'occhiata al manuale online per convincersene, ma per far funzionare un server in casa abbiamo già fin troppo. Se proprio volete andare sul difficile, il manuale online è ricchissimo di informazioni.Ed ora...

** Avvio e funzionamento
Niente di più facile, da root col comando apachectl potrete avviare, fermare e controllare il server, e fare un controllo sulla correttezza delle modifiche che avrete eventualmente fatto a httpd.conf. Lanciate apachectl per vedere le possibili opzioni, sono poche ed intuitive. Appena avviato il server, lanciate un navigatore qualsiasi e dategli come URL http://localhost, dovreste vedere "It Worked!".Ora potete sostituire le pagine predefinite con le vostre. Se terrete d'occhio il file di log, magari con tail -f /etc/httpd/logs/access_log ( o comunque lo abbiate chiamato ), mentre navigate, lo vedrete registrare tutti i vostri movimenti, e quelli di chiunque entri nel vostro server

** Un po' di sicurezza
Sicuramente non correte alcun rischio nel far vedere alcune pagine agli amici, o addirittura a permettere loro di crearne alcune in una directory utente, il vostro server resta online finché siete online voi, ed il vostro ip cambia ogni volta che vi connettete ad internet. Tuttavia controllate ogni tanto i file di log, anche perché tendono a crescere velocemente e sarebbe il caso di prevedere un processo cron che li cancelli ogni tanto, e non permettete, neanche a voi stessi, di seguire i SymLinks. Il server supporta tranquillamente i Javascript, le applet, i moduli flashplayer e le URL che puntano ad un file attiveranno un download, insomma avrete tutto ciò che si trova in Internet.
Il server che trovate sul cd e' già pronto a mettere a disposizione sia l'interprete php3 che il perl: basta che guardiate le foto in queste pagine. Come prova per il php3 scrivete una semplice pagina in html, così come vi ha insegnato Stefano Zanero; tra i due tag <body> e </body> inserite le seguenti istruzioni
<?php
phpinfo();
?>
 rinominate il file in phpinfodemo.php3 ed inseritelo in /home/httph/html. Ora attivate il server e con Netscape puntate a http://localhost/phpdemo.php3, ed osservate tutte le variabili che php3 vi mette a disposizione! E se avete seguito i programmi proposti nei mesi precedenti, prendete BlueFish e CoffeCup e cominciate a creare pagine web con supporto php, perl e ssl. Sul vostro server ( e su tutti quelli che vi rendono disponibili questi servizi  faranno un figurone! Buon divertimento col vostro nuovo sever!

**** DIDA

FOTO 0:	a0.jpg
Ecco cosa succede se cerchiamo di accedere a localhost se Apache è inattivo

FOTO 1:	a1.jpg
Linuxconf all'opera su httpd.conf

FOTO 2:	a2.jpg
Anche Comanche è un tool molto carino da usare

FOTO 3:	a3.jpg
Il file httpd.conf è molto ben commentato, ma il manuale online è meglio!

FOTO 4:	a4.jpg
E finalmente il coronamento di tante fatiche!

FOTO 5:	a5.jpg
Ora possiamo mettere sul nostro server tutto ciò che vogliamo, senza limiti di spazio.

FOTO 6:	a6.jpg
Effetto FancyIndexing

FOTO 7: 	a7.jpg
Il php3 fa bella mostra di se con una funziona che elenca tutte le variabili disponibili: questa è una piccola rappresentazione del mio sistema