
                             Apache Overview HOWTO

Daniel Lopez Ridruejo, ridruejo@apache.org

   v0.9, 10 ottobre 2002
     _________________________________________________________________

   Questo documento passa in rassegna i diversi progetti che riguardano
   Apache, come il server Apache HTTP ed il motore per Servlet e JSP
   Tomcat; inoltre fornisce indicazioni per ulteriori approfondimenti.
   Traduzione a cura di Tito Rizzo, tito.rizzo@tiscali.ite revisione a
   cura di Giuseppe Briotti, g.briotti@mclink.it.
     _________________________________________________________________

1. Introduzione

   Questo documento fornisce un'introduzione al mondo di Apache,
   includendo i vari progetti della Apache Software Foundation come il
   web server Apache e i vari software di terze parti, sia commerciali
   che open source. Apache  il server pi popolare di Internet. I nuovi
   utilizzatori di Apache, specie quelli che provengono da Windows, sono
   spesso inconsapevoli delle potenzialit di Apache, della sua
   estensibilit e, pi in generale, della efficiente interrelazione tra
   i vari componenti. Lo scopo di questo documento  quello di fornire
   una panoramica di tali possibilit, con una breve descrizione di
   ciascuna e indicazioni per ulteriori approfondimenti. Le informazioni
   sono state raccolte da varie fonti, includendo le pagine web dei vari
   progetti, interventi a conferenze, mailing list e siti web di Apache,
   oltre alla mia personale esperienza. Tali autori meritano la pi ampia
   considerazione, poich senza il loro lavoro, questo documento non
   sarebbe stato n possibile n necessario.

   Copyright 2002 Daniel Lopez Ridruejo

   Si accorda il permesso di copiare, distribuire e/o modificare questo
   documento entro i termini della Open Content Publication License,
   Versione 1.1. Una copia della licenza  contenuta nell'appendice "Open
   Content Open Publication License", o  consultabile al sito
   www.opencontent.org/openpub/.

1.1 Apache Software Foundation

   La Apache Software Foundation fornisce il supporto alla comunit che
   si occupa dei progetti di software open-source per Apache, progetti
   caratterizzati da un processo di sviluppo collaborativo e basato sul
   consenso, da una licemza aperta e pragmatica e dal desiderio di creare
   software di alta qualit, che apra nuove strade in questo campo. Ci
   reputiamo non semplicemente un gruppo di progetti che abbiano in
   comune lo stesso server, ma piuttosto una comunit di sviluppatori e
   di utenti.

   La ASF  la casa madre di innumerevoli progetti Open Source di
   successo, come il motore Tomcat per Servlet/JSP e lo strumento di
   compilazione ANT.

   Per saperne di pi sulla fondazione si veda qui.

1.2 Struttura del documento

   La prima parte del documento si occupa del Web Server Apache e dei
   relativi moduli. Tratta la storia, l'architettura e le possibilit di
   questo server e descrive in quali modi lo si possa estendere e
   personalizzare.

   La seconda parte del documento tratta i progetti della Apache Software
   Foundation, come quelli che costituiscono le comunit Jakarta e Java
   XML. Piuttosto che organizzare i progetti in base al linguaggio di
   programmazione o alla tecnologia impiegata, si  preferito
   organizzarli in base alle funzionalit che offrono.

2. Apache

   Apache  il principale server web, con una quota di mercato superiore
   al 60%, secondo Netcraft survey. Al successo di Apache hanno
   contribuito svariati fattori chiave:
     * La licenza di Apache.  una licenza open source, di tipo BSD, che
       consente l'utilizzo di Apache per scopi sia commerciali che non.
     * Una comunit di abili sviluppatori con una variet di bagagli
       culturali e un processo di sviluppo aperto basato su meriti
       tecnici.
     * Architettura modulare. Gli utenti di Apache possono facilmente
       aggiungere nuove funzionalit o adattare Apache al loro specifico
       ambiente di lavoro.
     * Portabilit: Apache funziona praticamente su tutte le versioni di
       Unix (e di Linux), Windows, BeOs, sui mainframe...
     * Robustezza e sicurezza.

   Svariate societ commerciali hanno adottato soluzioni basate su Apache
   per i loro prodotti, incluse Oracle, Red Hat e IBM. In aggiunta,
   Covalent fornisce moduli aggiuntivi e supporto 24x7 per Apache.

   I seguenti siti web usano Apache o uno dei suoi derivati. Se Apache va
   bene per loro, dovrebbe andare bene anche per voi :)
     * Amazon.com
     * Yahoo!
     * W3 Consortium
     * Financial Times
     * Apple
     * MP3.com
     * Stanford

   Dal sito web di Apache:

   Il progetto del Server HTTP Apache rappresenta uno sforzo per
   sviluppare e mantenere un server HTTP open-source per i moderni
   sistemi operativi, incluso Unix e Windows NT. Il fine di questo
   progetto  quello di fornire un server sicuro, efficiente e
   estensibile che garantisca servizi HTTP in aderenza con gli standard
   HTTP correnti.

   Il server Apache inizi la sua vita come modifica del server Web NCSA,
   uno dei primi server HTTP. Per saperne di pi sulla storia di Apache
   si veda qui.

   Il progetto Apache  poi cresciuto oltre la semplice implementazione
   di un server web, occupandosi dello sviluppo di altre tecnologie
   critiche dal lato server. La Apache Software Foundation, che sar
   descritta pi oltre, serve da ala protettiva per questi progetti.

2.1 Architettura

   Ci sono due versioni principali di Apache, la serie 1.3 e la serie
   2.0. Per quanto siano da considerarsi entrambe prodotti di qualit,
   nondimeno differiscono per architettura e possibilit.

  2.1.1 Apache 1.3

   Apache 1.3  stato portato su una grande variet di piattaforme Unix,
   ed  il server Web pi largamente utilizzato in Internet.

  Server Web basato su processi

   Apache 1.3 su Unix  un server Web basato su processi. Il programma
   Apache, al suo avvio, genera (fork) svariati processi figli; con il
   fork un processo primario genera copie identiche di se stesso,
   chiamate figli. Ognuno di tali figli pu servire una richiesta
   indipendente dalle altre, con il vantaggio di migliorare la stabilit:
   se uno di tali figli ha un comportamento anomalo (va fuori controllo o
   ha perdite di memoria) pu essere interrotto senza alcun effetto sugli
   altri. La stabilit  conseguita a spese delle prestazioni. Nella
   maggior parte dei sistemi Unix, la creazione di processi e il
   cambiamento del contesto (assegnazione di tempo del processore a ogni
   processo) sono operazioni costose in termini di risorse di sistema,
   dal momento che i processi sono isolati gli uni dagli altri e non
   possono quindi facilmente condividere codice e dati.

  Supporto per Windows

   Apache 1.3  la prima versione di Apache a supportare Windows, per
   quanto tale adattamento non sia considerato stabile come quello su
   Unix, visto che il server  stato progettato prendendo come
   riferimento Unix, mentre la versione per Windows ha costituito una
   aggiunta successiva, non molto bene integrata.

  Modularit

   Apache 1.3 possiede un'architettura modulare, che permette di
   abilitare o disabilitare moduli per aggiungere o rimuovere
   funzionalit al server Web.  possibile personalizzare Apache per
   migliorarne le prestazioni e la sicurezza. In aggiunta ai moduli di
   base, esiste un gran numero di moduli di terze parti, con i quali 
   possibile ampliare ulteriormente le funzionalit del server.

  2.1.2 Apache 2.0

   Apache 2.0  la pi recente e migliore versione del server Apache, la
   cui architettura contiene significativi miglioramenti rispetto alla
   serie 1.3, tra i quali si possono menzionare i seguenti.

  Moduli multiprocesso

   Apache 2.0 astrae l'architettura di elaborazione delle richieste
   tramite moduli speciali, chiamati Multi Processing modules (MPMs),
   ossia moduli Multi Processo, grazie ai quali Apache pu essere
   configurato come un server basato su processi, come un server
   puramente basato su thread o come un misto di tali modelli. I thread
   sono inglobati all'interno dei processi e sono eseguiti
   simultaneamente; a differenza dei processi, possono condividere sia
   dati che codice, risultando cos pi "leggeri", tanto che in molti
   casi i server di tipo "threaded" hanno una migliore scalabilit
   rispetto ai server basati su processi. Il server risulta, per contro,
   meno affidabile, perch se un thread ha un comportamento anomalo pu
   causare la corruzione di codice o di dati appartenenti ad altri
   thread.

  Moduli di protocollo

   La gestione dei protocolli in Apache 2.0  stata incapsulata in un suo
   proprio livello, rendendo possibile la scrittura di moduli per
   protocolli diversi da HTTP, quali POP3 per la posta o FTP per il
   trasferimento di file. Questi moduli di protocollo possono trarre
   vantaggio dalla solida ossatura del server e dalla funzionalit dei
   moduli, come l'autenticazione e la generazione di contenuti dinamici.
   Questo significa che, per esempio,  possibile autenticare i propri
   utenti POP3 tramite lo stesso database di utenti che Apache usa per le
   richieste web e che il contenuto FTP pu essere generato dinamicamente
   grazie a PHP, CGI o qualunque altra delle tecnologie descritte pi
   avanti in questo stesso documento.

  Architettura dei moduli e dei filtri

   Apache 2.0 conserva l'architettura modulare di 1.3 con l'aggiunta di
   un ulteriore meccanismo di estensione rappresentato dai filtri, che
   consentono ai moduli di modificare il contenuto generato da altri
   moduli. Possono criptare, effettuare la scansione alla ricerca di
   virus o comprimere non solo i file statici, ma anche i contenuti
   generati dinamicamente.

  Problemi di compatibilit

   Sfortunatamente, per quanto il modulo API sia simile in entrambe le
   versioni, non  comunque identico e i moduli di Apache 1.3 necessitano
   di essere adattati alla nuova architettura. La maggioranza dei moduli
   pi importanti, come PHP o mod_perl hanno gi la versione per Apache
   2.0, mentre altri, come mod_dav e mod_ssl, sono ora parte della
   distribuzione del server. Il funzionamento dei moduli su
   un'architettura "threaded" richiede modifiche specifiche ai moduli. I
   moduli distribuiti con Apache hanno beneficiato di tali modifiche e
   sono ora considerati 'thread-safe', ma i moduli e le librerie di terze
   parti possono non esserlo, per cui, se si ha bisogno di qualcuno di
   questi ci si deve limitare a usare Apache come server basato
   unicamente su processi.

  Portabilit

   Apache funziona ugualmente bene sia su piattaforme Windows che Unix
   grazie alla libreria Apache Portable Runtime (APR), che astrae le
   differenze tra sistemi operativi, come le API di accesso al network o
   ai file. Adattare Apache ad una nuova piattaforma risulta spesso
   altrettanto semplice che adattare il livello di astrazione
   rappresentato dalla Apache Portable Runtime, la quale provvede anche
   alla messa a punto e all'ottimizzazione specifica per una determinata
   piattaforma.

2.2 Sicurezza

   Apache fornisce svariati moduli orientati alla sicurezza per
   regolamentare gli accessi al server.

  Autenticazione

   I moduli di autenticazione permettono di determinare l'identit di un
   client, solitamente attraverso la verifica del nome utente e della
   password rispetto ai dati registrati in un database. Apache comprende
   inoltre moduli di autenticazione che connettono Apache con strutture o
   database di sicurezza, includendo tra gli altri: NT Domain controller,
   Oracle, mySQL, PostgresSQL e cos via.

   Particolarmente interessanti sono i moduli LDAP, in quanto consentono
   l'integrazione con servizi di directory a livello di compagnia o di
   impresa.  possibile trovare tali moduli presso
   http://modules.apache.org. Un modulo LDAP per Apache 2.0 pu essere
   scaricato dal sito web di Apache.

  Controllo degli accessi

   Apache fornisce il modulo mod_access che pu limitare l'accesso alle
   risorse basandosi su parametri della richiesta del client, come la
   presenza di una specifica intestazione o dell'indirizzo IP o del nome
   host del client. Moduli di terze parti permettono di limitare
   l'accesso per quei client responsabili di comportamenti irregolari,
   come spiegato pi oltre nelle sezioni dedicate alle prestazioni e al
   controllo dell'ampiezza di banda.

  SSL/TLS

   I protocolli Secure Sockets Layer/Transport Layer Security consentono
   di criptare i dati trasmessi tra il server Web e il client. In Apache
   1.3, i protocolli sono implementati con il mod_ssl, distribuito
   separatamente dal sito web di mod_ssl, che rende necessario applicare
   alcune patch al server, a causa della regolamentazione
   sull'esportazione di software di criptatura. La maggior parte di tali
   restrizioni sono nel frattempo decadute e, a partire da Apache 2.0, il
   modulo mod_ssl  incluso in Apache come modulo base.

2.3 Proxy

   Un proxy  un programma che effettua richieste per conto di qualcun
   altro. Esistono diversi tipi di proxy per il Web. Un tradizionale
   proxy HTTP, chiamato anche forward proxy, accetta richieste dai client
   (solitamente browser Web), contatta il server remoto e restituisce le
   risposte.

   Un reverse proxy  un server Web collocato di fronte a altri server,
   per i quali costituisce un accesso unificato sgravandoli da
   determinate incombenze, come l'elaborazione SSL.

   Apache supporta entrambi i tipi di proxy, l'immagazzinamento di una
   cache di contenuti Web e differenti proxy di backend tipo FTP.

2.4 Prestazioni e scalabilit

   La grezza prestazione  solo uno dei fattori da considerare in un
   server Web (di solito flessibilit e stabilit vengono prima).

   Detto questo, ci sono soluzioni per migliorare le prestazioni in
   server web che forniscono contenuti statici e sottoposti a carichi
   gravosi. Per le imprese di hosting, Apache fornisce anche sistemi per
   misurare e controllare l'uso dell'ampiezza di banda. In questo
   contesto, abitualmente la regolazione si traduce in un rallentamento
   della distribuzione del contenuto in base al file richiesto, ad uno
   specifico indirizzo IP del client e cos via. Questo  fatto al fine
   di prevenire gli abusi.
     * mod_mmap: Incluso nella distribuzione corrente di Apache 1.3,
       traccia in memoria una lista staticamente configurata di file
       richiesti spesso, ma modificati non frequentemente. In Apache 2
       questa funzionalit  inclusa nel mod_file_cache.
     * Mod_bandwidth: Questo modulo di Apache 1.3 abilita l'impostazione
       di limiti di ampiezza di banda per l'intero server o per singole
       connessioni, in base ad una specifica directory, alla dimensione
       dei file e al dominio IP remoto.
     * Modulo di condivisione dell'ampiezza di banda: fornisce la
       regolazione ed il bilanciamento dell'ampiezza di banda in base
       all'indirizzo IP del client. Supporta Apache 1.3 e le prime
       versioni di Apache 2.
     * Mod_throttle:Regola l'ampiezza di banda per host virtuale o per
       utente. Per Apache 1.3.

  Bilanciamento del Carico

   Usando il reverse proxy di Apache e il mod_rewrite  possibile
   ottenere un processo di distribuzione delle richieste tra una variet
   di server web di backend. Per maggiori informazioni si veda
   http://www.apache.org/docs/misc/rewriteguide.html

   In aggiunta, il mod_backhand  un modulo di Apache 1.3 che consente
   una redirezione di richieste HTTP priva di giunzioni, tra un server
   web e l'altro. Questa redirezione pu essere usata per coinvolgere
   macchine le cui risorse siano sottoutilizzate, ottenendo cos un
   granulare bilanciamento del carico delle richieste web. Per maggiori
   informazioni si veda http://www.backhand.org/.

  Compressione

   Apache 2.0 include mod_deflate, un modulo di filtraggio che comprime
   il contenuto prima di inviarlo al client. Questo limita lo spreco di
   banda ma pu avere un impatto negativo sulle prestazioni. Il modulo
   mod_gzip fornisce questa funzionalit per Apache 1.3.

2.5 Script CGI

   CGI sta per Common Gateway Interface. I programmi CGI sono programmi
   esterni che vengono invocati quando un utente richiede una certa
   pagina. Il programma CGI riceve le informazioni dal server web (valori
   variabili del form, tipo di browser, indirizzo IP del client e cos
   via) e usa tali informazioni per produrre una pagina web per il
   client.

   Apache ha il supporto per CGI e c' un modulo di terze parti per
   Apache 1.3 che garantisce il supporto per il protocollo FastCGI, il
   quale evita le penalizzazioni prestazionali associate all'avvio ed
   all'arresto di un programma CGI a ogni richiesta. Lo si pu trovare a
   http://fastcgi.com/

2.6 Integrazione delle Piattaforme di Sviluppo

   Le applicazioni web sono scritte in linguaggi di alto livello come
   Java, Perl, C# e cos via e Apache dispone di svariati moduli che ne
   permettono l'integrazione con il server. In molti casi i moduli
   espongono la API di Apache, cos che tutti i moduli Apache possano
   essere scritti in questi linguaggi.

  Perl

   mod_perl  un veterano tra i progetti Apache e uno dei pi fortunati.
   Ingloba all'interno di Apache un interprete Perl e consente l'accesso,
   tramite Perl, all'interno di Apache. Permette che interi moduli
   possano essere scritti in Perl o in un misto di Perl e di codice C.
   Nella versione 1.3 di Apache, in ogni processo figlio deve essere
   incluso un interprete, visto che il server si basa sul multiprocesso.
   In siti dinamici a alto traffico, l'accresciuta dimensione pu fare la
   differenza. Nelle versioni threaded di Apache 2.0, il mod_perl
   permette la condivisione del codice, dei dati e dello stato della
   sessione tra i vari interpreti, tendendo a una soluzione pi snella e
   veloce.

   mod_perl costituisce di per s un'altra piattaforma, con una grande
   variet di moduli disponibili, come Mason e Embperl per l'inclusione
   del Perl in pagine HTML e AxKit per template ricavati da XML.

  PHP

   Dal sito web di PHP: PHP  un linguaggio di scripting, lato server,
   indipendente dalla piattaforma, inserito in HTML..  il modulo per
   Apache pi popolare e questo grazie ad una variet di ragioni:
     * La curva di apprendimento  piuttosto bassa
     * Vasta documentazione
     * Ampio supporto per database
     * Modularit

   PHP ha una concezione modulare. Tra molti altri, ci sono moduli che
   garantiscono il supporto per:
     * Connettivit con database per i database pi diffusi, come Oracle,
       server MS-SQL, interfaccia ODBC, MySQL, mSQL, PostgreSQL e via
       dicendo.
     * supporto XML
     * Trasferimento di file: FTP
     * HTTP
     * Supporto per directory: LDAP
     * Supporto per la posta: IMAP, POP3, NNTP
     * Generazione di documentazione PDF
     * CORBA
     * SNMP

   Non bisogna fare altro che compilare/usare il modulo di cui si ha
   bisogno. PHP pu essere usato con Apache, come CGI esterno o con altri
   server web.  indipendente dalla piattaforma e funziona sulla maggior
   parte delle versioni di Unix e di Windows. Chiunque provenga da un
   ambiente Windows, avr probabilmente usato Internet Information Server
   con Active Server Pages e MS-SQL Server. Un sostituto comune per
   questo terzetto nel mondo Unix  Apache con PHP e MySQL. Dal momento
   che PHP funziona:
     * con Apache e con Microsoft IIS
     * con MySQL e con il server MS-SQL
     * su Unix e su Windows

   si ha a disposizione un percorso di migrazione piacevole e graduale da
   una soluzione incentrata su Microsoft a soluzioni basate su Unix.

  Python

   Python  un popolare linguaggio di scripting orientato agli oggetti.
   Mod_Python, che  ora un progetto Apache ufficiale, permette di
   integrare Python con il server web Apache.  possibile sviluppare
   applicazioni web complesse o sveltire script CGI Python esistenti. Le
   versioni recenti funzionano su Apache 2.0.

  Tcl

   Il Progetto Tcl Apache integra Tcl con il server web Apache. Tcl  un
   linguaggio di scripting leggero e estensibile. Per saperne di pi su
   Tcl si veda qui. Ci sono attualmente svariati moduli sotto l'ala di
   Apache Tcl:
     * Sia Mod_dtcl che Neowebscript consentono di includere Tcl nelle
       pagine HTML. Rivet combina il meglio di entrambi i moduli.
     * Il Mod_tcl sceglie un approccio simile a mod_perl, esponendo la
       API di Apache.
     * WebSH fornisce un ambiente Tcl per applicazioni Web.

  Tecnologie Microsoft

   Svariati moduli permettono l'integrazione con i linguaggi e le
   tecnologie Microsoft quali la struttura .Net o le Active Server Pages.

  .Net

   mod_haydn integra Mono con Apache e espone la API di Apache alla
   struttura .Net, permettendo, per esempio, la scrittura di moduli in
   C#. Covalent fornisce mod_asp.net, un modulo commerciale Windows che
   permette ad Apache di lanciare applicazioni ASP.Net, consentendo di
   rimpiazzare Microsoft IIS.

  ASP

   ASP, che sta per Active Server Pages,  una tecnologia Microsoft che
   permette di inserire codice, abitualmente Visual Basic, nelle pagine
   HTML. Diverse compagnie come ChilliSoft e Stryon forniscono prodotti
   in grado di far funzionare applicazioni ASP in ambiente Unix.

  ISAPI

   ISAPI  una API utilizzabile per estendere Microsoft IIS, in modo
   simile a come si userebbe la API di Apache. Apache include un modulo
   mod_isapi che rispecchia questa funzionalit e permette di usare
   moduli ISAPI.

  Java

   La maggior parte dei server di applicazioni, come quelli di Oracle,
   IBM e BEA forniscono moduli per l'integrazione con il server web
   Apache. In aggiunta, svariati moduli come mod_jk e mod_webapp
   permettono la connessione con Tomcat, un contenitore di Servlet e JSP
   (JavaServer Pages) che fa sempre parte della Apache Software
   Foundation.

  Moduli per altri linguaggi

   Questo documento ha descritto moduli per linguaggi lato server
   popolari come Perl, Python e PHP. Moduli aggiuntivi per altri
   linguaggi (JavaScript, Haskell, Ruby e altri) si possono trovare nella
   directory dei moduli di Apache.

2.7 Gestione

   Una parte importante dell'amministrazione di server Web comprende la
   compilazione, la configurazione e il controllo di diversi server.

  Strumenti di compilazione

   Apache pu essere esteso e personalizzato in molti modi differenti.
   L'integrazione di moduli esterni con il server pu talvolta costituire
   un compito difficile. Strumenti come Apache Toolbox possono
   semplificare questo compito, fornendo un ambiente di compilazione
   dotato di menu.

  Interfacce Utente per Apache

   Apache  configurato tramite file di testo, il che talvolta pu
   risultare ostico, specie per chi provenga da un ambiente Windows.
   Esistono strumenti grafici open source che facilitano questo compito:
     * Comanche, provato dal sottoscritto, indipendente dalla
       piattaforma, funziona su Unix/Linux, Windows e Mac.
     * Webmin: Una interfaccia piacevole, basata sul web.
     * gui.apache.org: Interfacce grafiche per il progetto Apache. I
       programmi si trovano a vari livelli di sviluppo.

  SNMP

   SNMP sta per Simple Network Management Protocol. Consente il controllo
   e la gestione di server di rete, attrezzature e cos via. I moduli
   SNMP per Apache aiutano nella gestione di vasti spiegamenti di server
   web, misurano la qualit del servizio offerto e l'integrazione di
   Apache con le preesistenti infrastrutture di gestione.
     * Mod SNMP open source per Apache 1.3.
     * Covalent SNMP fornisce un modulo SNMP commerciale, supporto per i
       pi recenti standard SNMPv3, integrazione con HP-Openview, Tivoli
       e via dicendo.

2.8 Publishing

   Gli autori di contenuti Web richiedono uno strumento per gestire tali
   contenuti e per l'upload sul server. Uno dei protocolli usati a questo
   scopo  DAV (Distributed Authoring and Versioning). DAV 
   un'estensione del protocollo HTTP che permette a utenti e applicazioni
   di pubblicare e modificare contenuti Web. La tecnologia DAV 
   ampiamente implementata, Microsoft la supporta a livello di sistema
   operativo (WebFolders) e nella sua suite Office. Lo stesso vale per
   Apple OS-X e una variet di prodotti di terze parti come Adobe, Oracle
   e cos via. Il modulo mod_dav per Apache 1.3 si pu trovare presso
   http://www.webdav.org/mod_dav/. In Apache 2.0, il mod_dav  incluso
   nella distribuzione di base.

   Antecedentemente a DAV, Microsoft disponeva di un proprio protocollo
   per il publishing, integrato nell'applicazione Microsoft FrontPages.
   Un supporto lato server per FrontPages si pu ottenere con i moduli di
   http://www.rtr.com/Ready-to-Run_Software/, tuttavia, a causa del modo
   con cui si integrano con Apache, non sono da ritenere sicuri.

2.9 Moduli di Protocollo

   Apache 2.0 introduce il concetto di moduli di protocollo. Il che
   significa che gli sviluppatori possono riutilizzare l'infrastruttura
   del server Apache per implementare nuovi protocolli, come quelli che
   si occupano della posta o del trasferimento di file. mod_ftp  un
   modulo FTP commerciale basato su Apache fornito da Covalent. mod_pop3
    un modulo open source che implementa il protocollo POP3, comunemente
   usato per recuperare i messaggi di posta dai relativi server.

2.10 Hosting virtuale

   Apache fornisce supporto estensivo per l'hosting virtuale, il che
   realizza la possibilit di servire vari siti web con un singolo
   server. In Apache 2.0, con i MPM si possono avere svariati processi
   "figli", ognuno dei quali al servizio di un dominio differente sotto
   identificativi di utente Unix differenti. Questo  molto importante
   per la sicurezza in scenari di hosting condiviso, in quanto permette
   di isolare i clienti l'uno dall'altro. I seguenti sono alcuni moduli
   addizionali, alternativi, per l'hosting virtuale.
     * mod_dynvhost
     * mod_pweb
     * mod_v2h

2.11 Supporto commerciale

   Apache  il server web d'elezione per svariate entit commerciali,
   incluse le grandi imprese. Tali compagnie chiedono determinati
   requisiti alle tecnologie da adottare, specie a quella che costituir
   il nucleo della loro strategia Internet, come i server Web. Tali
   requisiti comprendono prestazioni, stabilit, possibilit di gestione,
   supporto, servizi professionali e integrazione con i sistemi
   proprietari. Compagnie commerciali, come IBM, Red Hat e Covalent,
   forniscono i prodotti e i servizi necessari affinch Apache soddisfi
   le esigenze della clientela Enterprise.

   In aggiunta, svariate altre compagnie ed OEM offrono Apache come
   server web incluso nei loro prodotti.

3. Progetti ASF

   Per quanto Apache sia probabilmente il pi popolare, la Apache
   Software Foundation  la casa madre di molti altri progetti. Questa
   sezione fornisce una rassegna dei pi rilevanti, organizzati con
   criterio logico. La maggioranza di essi appartiene al progetto Jakarta
   od al progetto XML. Il progetto Jakarta ospita i progetti basati su
   Java mentre il progetto XML ospita, manco a farlo apposta, i progetti
   collegati all'XML.

3.1 Applicazioni e Ambienti

   I seguenti sono applicazioni e ambienti di sviluppo che fanno parte di
   ASF.

  3.1.1 Server

   I seguenti sono alcuni progetti ASF per il lato server.

  Tomcat

   Tomcat  la nave ammiraglia del progetto Jakarta. Costituisce
   l'implementazione ufficiale di riferimento per le tecnologie Servlet
   Java e JavaServer Pages.

   Per saperne di pi si consulti la homepage di Tomcat.

  JAMES (Java Apache Mail Enterprise Server)

   Complementare rispetto alle altre tecnologie Apache lato server, JAMES
   fornisce un server 100% Java, concepito come completa e portabile
   soluzione per un motore di posta per l'impresa, basato sui protocolli
   "aperti" attualmente disponibili (SMTP, POP3, IMAP, HTTP)

   Maggiori informazioni si possono trovare qui.

  Lucene

   Jakarta Lucene  un motore per la ricerca testuale, ad alte
   prestazioni, perfettamente attrezzato, scritto in Java e parte del
   progetto Jakarta. Per maggiori informazioni si veda
   http://jakarta.apache.org/lucene/

  Jetspeed

   Jetspeed  un portale web scritto in Java. Possiede una API modulare
   che consente l'aggregazione di differenti fonti di dati (XML, SMTP,
   iCalendar)

  3.1.2 Gestione dei contenuti

   I seguenti sono progetti relativi alla gestione dei contenuti

  Slide

   Slide  un ambiente ad alto livello per la gestione dei contenuti.
   Concettualmente, fornisce un'organizzazione gerarchica del contenuto
   binario che pu essere immagazzinato in archivi dati arbitrari,
   eterogenei e distribuiti. In aggiunta, Slide integra servizi di
   sicurezza, di bloccaggio e di versioning. Provvede anche
   all'implementazione server e client di WebDAV. Maggiori informazioni
   sulla home page di Slide

  Alexandria

   Alexandria  un sistema integrato di gestione della documentazione.
   Mette insieme tecnologie comuni a molti altri progetti open source
   come CVS e JavaDoc. L'intento  quello di integrare codice sorgente e
   documentazione per incoraggiare la documentazione e la condivisione
   del codice. Maggiori informazioni presso
   http://jakarta.apache.org/alexandria/index.html

  3.1.3 Ambienti

   I seguenti sono infrastrutture per lo sviluppo per applicazioni

  Turbine

   Turbine  un ambiente basato su servlet che permette a esperti
   sviluppatori Java di sviluppare rapidamente applicazioni web sicure.
   Turbine mette insieme una piattaforma per eseguire codice Java e
   componenti riutilizzabili. Alcune delle sue caratteristiche includono:
   integrazione con sistemi di template, sviluppo secondo il modello MVC,
   Access Control List, supporto per la localizzazione e cos via.
   Maggiori informazioni si possono trovare sul sito web di Turbine.

  Avalon

   Per chi abbia familiarit con sistemi Perl o BSD, Avalon  grosso modo
   l'equivalente di CPAN o della collezione di Port per le tecnologie
   Java di Apache. Non si limita a fornire linee guida per un deposito
   comune di codice, ma va oltre: costituisce uno sforzo per creare,
   progettare, costruire e mantenere una infrastruttura comune per
   applicazioni server scritte usando il linguaggio Java. Fornisce i
   mezzi affinch progetti lato server in Java possano essere facilmente
   integrati e compilati l'uno sull'altro. Ulteriori informazioni si
   trovano sul sito web di Avalon.

3.2 Presentazione

   I seguenti sono sistemi di template, motori di trasformazione e altri
   progetti relativi a presentazioni.

  Cocoon

   Cocoon trae vantaggio da altre tecnologie XML di Apache come Xerces,
   Xalan e FOP per fornire un completo ambiente XML per il publishing.
   L'ambiente pu dialogare con molte fonti di dati diverse e pu rendere
   il contenuto in svariati formati finali come PDF, HTML, XML e RTF. Pu
   essere eseguito come servlet o come programma da linea di comando. 
   possibile saperne di pi, riguardo a Cocoon, sulla homepage del
   progetto

  Velocity

   Velocity  un motore di template basato su Java. Pu essere usato come
   utilit indipendente per generare codice sorgente, HTML, relazioni o
   pu essere combinato con altri sistemi per fornire servizi di
   template. Velocity  basato sul paradigma "Model View Controller", che
   rafforza la separazione tra il codice Java e il template HTML. 
   possibile saperne di pi su Velocity qui.

  AxKit

   AxKit  un popolare Application Server basato su XML per mod_perl e
   Apache. Consente la separazione tra contenuto e presentazione e
   permette la conversione al volo da XML a ogni altro formato.

  Xalan

   Xalan  un processore XSLT disponibile per Java e C++. XSL  un
   linguaggio stylesheet per XML. La T sta per Transformation. XML 
   valido per l'archiviazione di dati strutturati (informazioni).
   Talvolta pu rendersi necessario visualizzare tali dati o applicare
   qualche altra trasformazione. Xalan prende il documento XML originale,
   legge la configurazione per le conversioni (stylesheet) e lo
   restituisce come HTML, testo semplice o come altro documento XML. Per
   saperne di pi su Xalan si consultino le homepage dei progetti Xalan
   Java e Xalan C++.

  FOP

   Dal sito web: FOP  un'applicazione Java che legge l'albero degli
   oggetti di formattazione e lo trasforma in un documento PDF . FOP
   prende dunque un documento XML e lo restituisce come PDF, in modo
   simile a quanto fa Xalan con l'HTML o i file di testo. Per saperne di
   pi su FOP si veda qui.

3.3 Parser e Librerie per l'Accesso ai Documenti

   Le seguenti sono differenti librerie che possono essere usate per
   analizzare e manipolare una variet di formati di documenti.

  Xerces

   Il progetto Xerces fornisce un parser XML per una variet di
   linguaggi, inclusi Java, C++ e Perl. I binding Perl sono basati sui
   sorgenti C++. Un parser XML  uno strumento usato per l'accesso
   programmatico a documenti XML. Ecco una descrizione degli standard
   supportati da Xerces:
     * DOM: DOM sta per Document Object Model. I documenti XML sono per
       natura gerarchici (tag annidati). Ai documenti XML si pu accedere
       tramite un'interfaccia strutturata ad albero. Il processo si
       svolge cos:
          + Analisi del documento
          + Costruzione dell'albero
          + aggiunta/cancellazione/modifica dei nodi
          + Serializzazione della struttura
     * SAX:Semplice API per XML, basata su flusso; il che significa che
       lancer degli eventi in base agli elementi incontrati. Tali eventi
       possono essere usati per costruire, per esempio, una intelaiatura
       DOM.
     * XML Namespaces
     * XML Schema: Lo standard XML fornisce la sintassi per la scrittura
       di documenti. XML Schema fornisce gli strumenti per la definizione
       dei contenuti del documento XML (semantica). Permette di definire
       se un certo elemento nel documento debba essere un intero compreso
       tra 10 e 20 o contenere un indirizzo IP.

   L'iniziale codice di base per il progetto XML di Xerces fu donato da
   IBM. Maggiori informazioni si possono ottenere presso le homepage
   Xerces Java, Xerces C++ e Xerces Perl .

  Batik

   Batik  un toolkit basato su Java per applicazioni che vogliano usare
   immagini nel formato Scalable Vector Graphics (SVG) per vari scopi
   come la visualizzazione, la generazione o la manipolazione. 

    incentrato su XML e aderente alle specifiche W3C.  un po' atipico
   rispetto agli altri progetti Apache, in quanto fornisce un componente
   grafico. Batik fornisce degli hook per estendere la struttura tramite
   tag personalizzati e permette la conversione da SVG ad altri formati
   come JPEG o PNG. Si pu saperne di pi sulla homepage di Batik

  POI

   Il progetto POI consiste di API per manipolare vari formati di file
   basati sul formato OLE 2 Compound Document di Microsoft usando
   soltanto Java. Questo include i documenti Word e Excel. Si possono
   trovare maggiori informazioni presso http://jakarta.apache.org/poi/

3.4 Interoperabilit

   Le seguenti sono librerie per la comunicazione remota e
   l'interoperabilit tra i server.

  SOAP

   Apache SOAP ("Simple Object Access Protocol") e Axis sono
   implementazioni del protocollo SOAP

   SOAP  un protocollo leggero per lo scambio di informazioni in
   ambiente decentralizzato e distribuito.  un protocollo basato su XML
   che consiste di tre parti:
     * un involucro che definisce un'ossatura per la descrizione di cosa
       ci sia in un messaggio e come processarlo,
     * un insieme di regole di codifica per l'espressione di istanze di
       tipi di dati definiti dall'applicazione, e
     * una convenzione per rappresentare chiamate e risposte di procedure
       remota.

   Fondamentalmente, si pu pensare a SOAP come a un sistema di chiamate
   di procedura remota, basato su HTTP e XML. Da un lato questo comporta
   verbosit e lentezza rispetto ad altri sistemi. Dall'altro agevola
   l'interoperabilit, il debugging e lo sviluppo di client e di server
   per una variet di linguaggi, dal momento che la maggioranza dei
   moderni linguaggi dispone di moduli HTTP e XML. Per saperne di pi si
   veda la homepage di Apache SOAP

  XML-RPC

   Il progetto XML-RPC  un'implementazione Java del protocollo XML-RPC,
   un protocollo leggero simile a SOAP e suo predecessore.

  Sicurezza XML

   Il progetto sicurezza di XML fornisce la verifica della firma digitale
   dei documenti XML per lo scambio sicuro di documenti.

3.5 Sviluppo

  Apache Portable Runtime

   Il progetto APR fornisce uno strato di portabilit che astrae un certo
   numero di API per la manipolazione di file, l'accesso alla rete e cos
   via.  scritto in C e funziona sulla maggior parte delle versioni di
   Unix, su Windows e una variet di altri sistemi. Costituisce la base
   di Apache 2.0.

  Ant

   Ant  uno strumento di compilazione scritto in Java. Dispone di una
   API modulare e pu essere esteso con la creazione di nuovi task. 
   governato da file di configurazione in XML.

  Byte Code Library

   La Byte Code Engineering Library (BCEL)  una libreria per analizzare,
   creare e manipolare i file binari delle classi Java.

  Log4j

   Questo pacchetto fornisce una infrastruttura per la gestione dei log
   compatibile con le applicazioni Java. Pu essere abilitato all'avvio
   senza modificare il file binario ed  stato progettato con un occhio
   alle prestazioni. Pu essere trovato presso
   http://jakarta.apache.org/log4j/

  ORO and Regexp

   ORO  un pacchetto completo che fornisce supporto alle espressioni
   regolari per Java. Include il supporto alle espressioni regolari
   Perl5, alle espressioni glob e cos via. Il tutto sotto licenza
   Apache. Per saperne di pi su ORO si veda
   http://jakarta.apache.org/oro/index.html. Un altro pacchetto leggero,
   della ASF, per espressioni regolari,  Regexp.

  Struts

   Struts  un progetto Apache che tenta di trasportare il paradigma
   progettuale Model-View-Controller (MVC) nello sviluppo web.  basato
   sulle tecnologie Servlet e JavaServer Pages. La parte "modello" 
   composta di oggetti Java lato server, che rappresentano lo stato
   interno dell'applicazione. La parte "vista"  costruita attraverso le
   JavaServer Pages (JSP), che sono una combinazione di HTML/XML statico
   e di Java. Le JSP permettono inoltre allo sviluppatore di definire
   nuovi tag. La parte "controller" consiste di servlet, che accolgono le
   richieste (GET/POST) del client, agiscono sul modello e aggiornano la
   vista fornendo la JSP appropriata.  possibile saperne di pi sulla
   pagina del progetto Struts.

  Taglibs

   La tecnologia JavaServer Pages permette agli sviluppatori di
   aggiungere funzionalit tramite tag personalizzati. Il progetto
   Taglibs intende essere un archivio comune per tali estensioni. Include
   tag per utilit comuni (per es. date), per l'accesso a database SQL e
   cos via.

   Per saperne di pi su TagLibs si veda
   http://jakarta.apache.org/taglibs/. Una pi ampia documentazione 
   inclusa nel pacchetto.

  Database

   OJB  uno strumento per la mappatura di database che permette la
   persistenza e l'archiviazione di oggetti Java nei database
   relazionali. Xindice  un database nativo XML per l'archiviazione e
   l'interrogazione di documenti XML.

  Commons

   Il progetto Commons fornisce una grande variet di componenti Java
   riutilizzabili con minime dipendenze.

3.6 Testing

   I seguenti progetti ASF riguardano il testing e l'analisi delle
   prestazioni.

  httpd-test

   Il progetto httpd-test fornisce un ambiente di test per il server web
   Apache e strumenti come flood per il test del carico HTTP.

  Cactus

   Cactus  un ambiente di test per la verifica di codice Java lato
   server, come Servlet e EJB.

  JMeter

    uno strumento per i test scritto in Java, con un'interfaccia
   grafica. Si pu ottenere presso http://jakarta.apache.org/jmeter/.

  Lakta

   Lakta  uno strumento end-to-end di testing HTTP.

  Watchdog

   Il progetto Watchdog  un corredo di set per la convalida delle
   specifiche Servlet e JavaServer Pages.

4. Dove trovare maggiori informazioni

   Risorse aggiuntive relative a Apache

4.1 Siti Web

   Alcuni utili siti web
     * Sito Web di Apache
     * Apache Week
     * directory dei moduli di Apache
     * Apache today
     * Apache World
     * sezione di Slashdot su Apache

4.2 Libri

   L'autore mantiene una lista di libri correlati a questo documento. Non
    un elenco esaustivo, ma piuttosto include quei libri che l'autore ha
   personalmente trovato ben scritti e utili.

4.3 Forum di supporto

    possibile trovare la mailing list degli utenti Apache presso
   http://httpd.apache.org/lists.html. Esistono liste simili per gli
   altri progetti documentati qui. Prima di inviare richieste di aiuto si
   legga il documento delle "Frequently Asked Questions". Si pu ottenere
   supporto anche nel newsgroup comp.infosystems.www.servers.unix presso
   http://groups.google.com.

   Se si desidera un supporto commerciale, si valuti se contattare
   Covalent, che fornisce supporto di esperti per Apache (ovviamente, a
   pagamento). Se si sta usando Apache sotto Linux, il proprio venditore
   Linux potrebbe avere piani di supporto che comprendano anche Apache.

5. Contattare l'Autore

   Potete contattarmi all'indirizzo daniel @ rawbyte.com . Suggerimenti e
   correzioni saranno graditi, vi prego per di non spedirmi messaggi
   chiedendomi di risolvere i malfunzionamenti della vostra installazione
   di Apache. Non ho proprio il tempo di rispondere individualmente a
   tutti. Se avete bisogno di supporto, fate riferimento alle risorse
   citate sopra.

5.1 Traduzioni

   Chiunque desideri contribuire alla traduzione di questo documento
   dovrebbe utilizzare il sorgente SGML. Si veda http://www.tldp.org per
   informazioni. Mandatemi una nota cos che io possa essere certo che
   otteniate la versione pi recente.

6. Open Content Open Publication License

   Open Publication License Draft v1.0, 8 June 1999 (text version)

6.1 REQUIREMENTS ON BOTH UNMODIFIED AND MODIFIED VERSIONS

   The Open Publication works may be reproduced and distributed in whole
   or in part, in any medium physical or electronic, provided that the
   terms of this license are adhered to, and that this license or an
   incorporation of it by reference (with any options elected by the
   author(s) and/or publisher) is displayed in the reproduction.

   Proper form for an incorporation by reference is as follows:

   Copyright (c) <year> by <author's name or designee>. This material may
   be distributed only subject to the terms and conditions set forth in
   the Open Publication License, vX.Y or later (the latest version is
   presently available at http://www.opencontent.org/openpub/). The
   reference must be immediately followed with any options elected by the
   author(s) and/or publisher of the document (see section VI).

   Commercial redistribution of Open Publication-licensed material is
   permitted.

   Any publication in standard (paper) book form shall require the
   citation of the original publisher and author. The publisher and
   author's names shall appear on all outer surfaces of the book. On all
   outer surfaces of the book the original publisher's name shall be as
   large as the title of the work and cited as possessive with respect to
   the title.

6.2 COPYRIGHT

   The copyright to each Open Publication is owned by its author(s) or
   designee.

6.3 SCOPE OF LICENSE

   The following license terms apply to all Open Publication works,
   unless otherwise explicitly stated in the document.

   Mere aggregation of Open Publication works or a portion of an Open
   Publication work with other works or programs on the same media shall
   not cause this license to apply to those other works. The aggregate
   work shall contain a notice specifying the inclusion of the Open
   Publication material and appropriate copyright notice.

   SEVERABILITY. If any part of this license is found to be unenforceable
   in any jurisdiction, the remaining portions of the license remain in
   force.

   NO WARRANTY. Open Publication works are licensed and provided "as is"
   without warranty of any kind, express or implied, including, but not
   limited to, the implied warranties of merchantability and fitness for
   a particular purpose or a warranty of non-infringement.

6.4 REQUIREMENTS ON MODIFIED WORKS

   All modified versions of documents covered by this license, including
   translations, anthologies, compilations and partial documents, must
   meet the following requirements:

     * 1. The modified version must be labeled as such.
     * 2. The person making the modifications must be identified and the
       modifications dated.
     * 3. Acknowledgement of the original author and publisher if
       applicable must be retained according to normal academic citation
       practices.
     * 4. The location of the original unmodified document must be
       identified.
     * 5. The original author's (or authors') name(s) may not be used to
       assert or imply endorsement of the resulting document without the
       original author's (or authors') permission.

6.5 GOOD-PRACTICE RECOMMENDATIONS

   In addition to the requirements of this license, it is requested from
   and strongly recommended of redistributors that:

     * 1. If you are distributing Open Publication works on hardcopy or
       CD-ROM, you provide email notification to the authors of your
       intent to redistribute at least thirty days before your manuscript
       or media freeze, to give the authors time to provide updated
       documents. This notification should describe modifications, if
       any, made to the document.
     * 2. All substantive modifications (including deletions) be either
       clearly marked up in the document or else described in an
       attachment to the document.
     * 3. Finally, while it is not mandatory under this license, it is
       considered good form to offer a free copy of any hardcopy and
       CD-ROM expression of an Open Publication-licensed work to its
       author(s).

6.6 LICENSE OPTIONS

   The author(s) and/or publisher of an Open Publication-licensed
   document may elect certain options by appending language to the
   reference to or copy of the license. These options are considered part
   of the license instance and must be included with the license (or its
   incorporation by reference) in derived works.

   A. To prohibit distribution of substantively modified versions without
   the explicit permission of the author(s). "Substantive modification"
   is defined as a change to the semantic content of the document, and
   excludes mere changes in format or typographical corrections.

   To accomplish this, add the phrase 'Distribution of substantively
   modified versions of this document is prohibited without the explicit
   permission of the copyright holder.' to the license reference or copy.

   B. To prohibit any publication of this work or derivative works in
   whole or in part in standard (paper) book form for commercial purposes
   is prohibited unless prior permission is obtained from the copyright
   holder.

   To accomplish this, add the phrase 'Distribution of the work or
   derivative of the work in any standard (paper) book form is prohibited
   unless prior permission is obtained from the copyright holder.' to the
   license reference or copy.
