Il nome di questo Web server, Lighttpd, deriva dalla contrazione light footprint + httpd = LightTPD e si pronuncia "lighty". Il logo, un aereoplanino di carta, ne evoca i tre elementi essenziali: leggerezza, movimento verticale ovvero crescita, dinamicità, e libertà.
Lighttpd nasce come soluzione per server sottoposti a massicci carichi di lavoro, riducendo ed ottimizzando l'utilizzo di memoria e CPU. Pur essendo stato progettato con l'obiettivo principale di garantire un numero di connessioni parallele superiore ai più blasonati Web server, non disdegna alcune caratteristiche avanzate quali FastCGI, autenticazione, URL rewriting, SSL ed altre, come testimoniano i numerosi moduli disponibili. Il software è open source, rilasciato sotto licenza BSD ed è utilizzabile su piattaforme unix-like anche se esistono alcuni progetti per il porting su Windows.
Caso mai nutriste dei dubbi su Lighttpd vi sono nomi del calibro di YouTube, SourceForge o Wikipedia che lo adottano su alcuni dei loro Web server. Potete trovare un elenco di utilizzatori alla pagina Powered by Lighttpd. Anche le statistiche di Netcraft testimoniano come questo server stia rapidamente guadagnando popolarità inserendosi nei top 5 più installati.
Prima di cominciare a sporcarci le mani un'ultima notazione di carattere storico: lighttpd nasce nel febbraio del 2003 ad opera di Jan Kneschke che, nel bel mezzo della stesura della tesi di laurea, decide di distrarsi un po' dando alla luce la sua creatura. Ammetto di provare una certa invidia per questi programmatori che, per diletto, decidono di scrivere ex novo un mail server o un Web server.
Installiamo Lighttpd
Per installare il Web server possiamo percorrere o la strada dei pacchetti precompilati, o la compilazione a partire dai sorgenti. Di seguito prenderemo in considerazione la prima soluzione, meno "insidiosa", in questo caso risultano disponibili sia i pacchetti .rpm sia i .deb. Al momento della stesura dell'articolo la stable release è 1.4.15 e, se siete interessati all'archivio dei sorgenti potete scaricarlo dal sito madre. I prerequisiti di base sono libpcre e libz, ma possono essere richieste altre librerie da particolari moduli. Consiglio una scorsa alla pagina Additional Libraries per l'elenco delle possibili dipendenze. Se preferite o siete obbligati alla compilazione dei sorgenti, dovete avere le due librerie citate installate con i loro headers. La sequenza consueta ./configure && make && make install
, senza specificare particolari parametri, installerà tutto nella directory /usr/local/.
Ma abbiamo detto che sceglieremo la via più semplice dei pacchetti precompilati (consigliabile almeno per i primi esperimenti) ed in particolare, considerando una Linux box con Fedora Core 6, ci appoggeremo agli automatismi di YUM. In modo analogo chi usa Debian e derivate, come Ubuntu, può affidarsi ad APT.
Cominciamo con assumere il ruolo di root e verificare la presenza dei prerequisiti:
# yum list zlib pcre pcre.i386 6.6-1.1 installed zlib.i386 1.2.3-3 installed
Se la risposta è simile alle due ultime righe siete a cavallo, altrimenti dovete procedere con il comando:
# yum install zlib pcre
Passiamo ora al Web server:
# yum install lighttpd
Yum propone lighttpd.i386 versione 1.4.15-1.fc6, analogamente dalla versione Core 3 in poi dovreste trovare il pacchetto disponibile (magari non aggiornato all'ultima release).
Nel mio caso Yum ha segnalato una dipendenza mancante: lua.i386, richiesta dal modulo mod_magnet
, e mi ha proposto di installarla insieme al pacchetto principale. Un bel "y" per yes ed il processo è terminato .....sembra quasi di essere dalle parti di Redmond ...
Ora però è meglio investigare su cosa l'automatismo abbia prodotto nel nostro sistema.
Le conseguenze dell'installazione
Innanzitutto notiamo la comparsa di un nuovo utente, lighttpd
, e gruppo, lighttpd
: sono quelli che utilizzeremo per far girare il Web server onde evitare, per ragioni di sicurezza, i privilegi di root. Essi saranno necessari solo allo start up per mettere il server in ascolto sulla porta 80.
Proviamo ora a vedere dove si è cacciato Lighttpd:
# which lighttpd /usr/sbin/lighttpd
Come era prevedibile lo ritroviamo in /usr/sbin/. Diamo inoltre una scorsa ai servizi in cerca del Web server:
# chkconfig --list | grep lighttpd lighttpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Eccolo lì bell'e pronto anche se impostato ad off
in tutti i runlevel. Quando e se decideremo di avviarlo automaticamente, dovremo portarlo ad on
nel o nei runlevel che ci interessano, ad esempio:
# chkconfig --level 345 lighttpd on.
Dando uno sguardo al file system facciamo altre interessanti scoperte: prima di tutto la nuova directory /srv/www/lighttpd/ che sarà la document root di default del Web server, come potrebbe essere /var/www/html/ per Apache. Troviamo inoltre /etc/lighttpd/ contenente il file di configurazione lighttpd.conf con funzione analoga all'httpd.conf di Apache presente in /etc/httpd/conf/. In /usr/lib/lighttpd/ sono inseriti tutti i moduli installati mentre /var/log/lighttpd/ sarà destinata a contenere i file di log del Web server.
A questo punto non ci resta che editare opportunamente il file di configurazione ed avviare Lighttpd.
Configurazione del Web server
Come sopra accennato il file lighttpd.conf è la base di partenza per configurare il nostro server. La sua lettura consente di acquisire i primi rudimenti della sintassi usata da Lighttpd. Di seguito creeremo una configurazione minimale che ci consenta semplicemente di fornire pagine statiche e di loggare l'attività del Web server. Sempre meglio procedere per piccoli passi quando ci si muove in un ambiente nuovo: ci sarà spazio in successivi articoli per complicare le cose.
Partiamo rinominando il file lighttpd.conf (ad esempio lighttpd.orig.conf) per non pasticciare con il file originale e creiamone uno nuovo, vuoto, con il medesimo nome. Ora apriamolo con il nostro editor di testi preferito e cominciamo ad inserire le direttive necessarie ad ottenere la configurazione che ci siamo prefissati:
server.modules = ( "mod_accesslog" )
Questa direttiva permette di caricare i moduli che vogliamo attivare all'avvio del server. Basta elencarli tra le parentesi separati da virgola. Nel nostro caso sarà sufficiente il modulo necessario al log degli accessi, mod_accesslog
. Per un elenco completo dei moduli disponibili rimando alla documentazione ufficiale ed al file di configurazione originale.
Come anticipato specifichiamo un utente con cui far girare il nostro server evitando i privilegi di root:
server.username = "lighttpd" server.groupname = "lighttpd"
Mettiamo in ascolto il Web server sulla porta 3000 onde evitare conflitti con l'eventuale Apache già attivo sulla nostra Linux box ed indichiamo la posizione del file contenente il "process id" per gli script di avvio.
server.port = 3000 server.pid-file = "/var/run/lighttpd.pid"
Specifichiamo ora la posizione delle pagine che intendiamo rendere disponibili, la cosiddetta document root:
server.document-root = "/srv/www/lighttpd/"
Indichiamo la posizione in cui loggare accessi ed errori:
accesslog.filename = "/var/log/lighttpd/access_log" server.errorlog = "/var/log/lighttpd/error_log"
La memorizzazione degli accessi avverrà di default nel consueto formato CLF.
Continuiamo elencando i possibili nomi dei file di indice in modo analogo a quanto faremmo con la direttiva DirectoryIndex di Apache. Così facendo la richiesta di una directory, senza specificare un particolare nome di file, determinerà la sua scansione alla ricerca di uno dei file elencati. Preoccupiamoci inoltre di escludere da eventuali richieste alcuni file. Stiamo creando una configurazione per pagine statiche evitiamo di fornire per errore il codice sorgente di script Php o Perl, così pure di file di backup o di inclusione.
index-file.names = ( "index.html", "index.htm", "default.htm" ) static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", "~", ".inc" )
Come ultimo passo mappiamo le estensioni dei file sui corrispondenti mime-types per aiutare i clients che scaricheranno tali file. La lista è solo esemplificativa, per l'elenco completo fate riferimento al file di configurazione originale.
mimetype.assign = ( ".pdf" => "application/pdf", ".mp3" => "audio/mpeg", ".gif" => "image/gif", ".jpg" => "image/jpeg", ".jpeg" => "image/jpeg", ".png" => "image/png", ".html" => "text/html", ".htm" => "text/html", ".text" => "text/plain", ".txt" => "text/plain", ".xml" => "text/xml", )
A questo punto dovremmo aver inserito un numero di direttive sufficienti ad ottenere il funzionamento basilare di Lighttpd che ci siamo proposti. Non resta che provare la correttezza sintattica della configurazione prima di avviare il server.
# lighttpd -t -f lighttpd.conf
Se la risposta è Syntax OK, possiamo far partire Lighttpd:
# service lighttpd start
Il nostro server è finalmente attivo ed in ascolto sulla porta 3000, per verificarne il funzionamento apriamo il browser e digitiamo http://localhost:3000. In risposta comparirà la pagina di default con l'aereoplanino, logo di Lighttpd, ed il motto fly light. Basterà sostituire il contenuto di /srv/www/lighttpd/ con le nostre pagine Html per terminare la procedura.
Conclusioni
In questo articolo introduttivo abbiamo visto come installare e configurare Lighttpd per avere un Web server funzionante ma elementare. Ovviamente le possibilità non si fermano qui basti pensare ai numerosi moduli che consentono tutte le comuni configurazioni che siamo soliti implementare con Apache. Dal virtualhosting, all'aliasing, alle connessioni SSL e, soprattutto, all'uso di PHP come linguaggio di scripting lato server. Oltre a ciò Lighttpd presenta alcune originali caratteristiche come la sintassi condizionale o la particolare gestione delle inclusioni. A breve ci sarà spazio su queste pagine per approfondire alcune delle tematiche proposte.