Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

AppWeb un web server sicuro ed "embeddable"

Un web server leggero e adatto ad essere usato come "personal web server" e per essere incorporato in altre applicazioni in modalità embedded
Un web server leggero e adatto ad essere usato come "personal web server" e per essere incorporato in altre applicazioni in modalità embedded
Link copiato negli appunti

Quando si parla di server web istintivamente il pensiero va' ad Apache, il re dei server, almeno in ambiente Unix/Linux. Tuttavia vi sono circostanze in cui altre soluzioni, meno note, possono presentare caratteristiche più allettanti. In particolare prenderemo in considerazione AppWeb un web server progettato sin dalla nascita per essere sicuro, modulare, leggero ed ideale per sistemi embedded o per essere incorporato in applicazioni. Non è la prima volta che dedichiamo spazio a software alternativi ad Apache, perfetto per gestire con efficienza numerosi ed estesi siti web, ma poco adatto a situazioni quali:

  • l'adozione di hardware che richiede di ridurre al minimo il consumo di memoria e di CPU
  • l'amministrazione di un dispositivo elettronico con un'interfaccia web incorporata
  • l'implementazione di un personal web server
  • la realizzazione di applicazioni, per esempio in PHP, senza la disponibilità di una macchina dedicata su cui farle girare, in cui client e server coincidono
  • la creazione di un cd (o pen drive) contenente siti dinamici da mostrare ai clienti.

Tutto questo potrebbe far pensare ad un software semplice e povero di caratteristiche, niente di più lontano dalla realtà, infatti tra le caratteristiche di AppWeb possiamo citare:

  • aderenza agli standard HTTP/1.0, HTTP/1.1
  • caricamento dinamico di moduli
  • supporto per Common Gateway Interface, CGI
  • supporto per Embedded Gateway Interface, EGI, un'alternativa moderna a CGI
  • PHP 4 o 5, eseguibile sia come modulo che come CGI
  • implementazione di connessioni SSL, Secure Socket Layer
  • basic e digest authentication
  • virtual hosts basati sul nome o su indirizzo IP
  • ascolto su porte multiple
  • implementazione di Embedded Server Pages

L'elenco non finisce qui, in particolare vale la pena citare l'utilizzo di JavaScript lato server il cosiddetto Embedded JavaScript. Tale linguaggio, come è noto, viene comunemente interpretato ed eseguito dal browser del navigatore. Tuttavia AppeWeb gestisce un sottoinsieme di istruzioni che possono essere utilizzate in maniera simile a PHP o ASP.

Il web server è installabile su varie piattaforme: Linux, Windows, Mac OSX e Solaris. Inoltre supporta processori di diverse architetture: ARM7, MIPS32, i386/X86, PowerPC e Sparc.

Dietro a questo progetto c'è l'azienda americana Embedthis Software, che ha contribuito alla maggior parte del codice e che ha voluto il software open source (GNU GPL) e free. Ovviamente Embedthis fornisce a pagamento supporto su AppWeb e sviluppo di soluzioni basate su tale programma.

A questo punto se vogliamo provare il software dirigiamo il nostro browser verso l'area download del sito dedicato al progetto. La versione stabile disponibile al momento della stesura dell'articolo è 2.4.2. Possiamo prelevarla sia sotto forma di pacchetti precompilati per varie piattaforme (.rpm, .deb, .exe), sia sotto forma di codice sorgente. Il download include documentazione con esempi, note di rilascio, e guida all'installazione. Tutte queste informazioni possono anche essere consultate on-line prima di decidere se avventurarsi nella sperimentazione. Se necessitiamo di supporto gratuito possiamo trovarlo sul sito consultando il forum.

Infine chi volesse testare le caratteristiche in via di sviluppo può prelevare, al medesimo indirizzo, la versione non stabile 3.0A.1.

Installiamo AppWeb

Per le nostre prove utilizzeremo una macchina Linux, in particolare la distribuzione di riferimento sarà Fedora. Dovremo dunque selezionare il file appweb-2.4.2-2-fedora-LINUX-i686.rpm.tar.gz dalla pagina di download. Ora assumiamo i privilegi di root, posizioniamoci in una directory di lavoro a nostra scelta e decomprimiamo l'archivio:

[root]# tar xvfz appweb-2.4.2-2-fedora-LINUX-i686.rpm.tar.gz

README.TXT
install
remove
appweb-2.4.2-2-LINUX-i686.rpm
appweb-dev-2.4.2-2-LINUX-i686.rpm
appweb-doc-2.4.2-2-LINUX-i686.rpm
appweb-src-2.4.2-2.rpm

Come mostra l'esempio al termine dell'operazione ci troveremo di fronte a diversi file. I vari .rpm consentiranno di scegliere quali componenti del software installare. Oltre a questi possiamo notare il consueto file di documentazione README.TXT e due script, install e remove. Questi ultimi hanno lo scopo di guidare l'utente nella fase d'installazione e prima configurazione o di rimozione del software. Non disdegniamo l'aiuto dello script e digitiamo:

[root]# ./install

Come era auspicabile verremo condotti passo passo nella scelta delle possibili opzioni. Se i valori di default ci stanno bene possiamo semplicemente premere il tasto invio per confermarli. Una possibile configurazione finale potrebbe essere questa:

Install binary package: Y
Install development headers and samples package: Y
Install documentation and samples package: Y
Start automatically at system boot: N
HTTP port number: 7777
SSL port number: 4443
Username: nobody
Groupname: nobody

In breve abbiamo deciso d'installare i binari, la documentazione con gli esempi e le parti dedicate allo sviluppo. AppWeb non si avvierà automaticamente al boot, ma dovremo lanciarlo noi. Si metterà in ascolto sulle porte 7777 e 4443 per SSL. Infine il web server girerà con l'utente nobody. Queste scelte sono orientate alla volontà di sperimentare il software e possono differire da quelle usate in uno scenario di produzione.

Al termine della procedura accettiamo la configurazione scelta e vedremo che lo script installerà autonomamente i pacchetti rpm necessari.

Nella prossima parte dell'articolo vedremo come avviare AppWeb e come utilizzare embedded JavaScript.

Nella prima parte di questo articolo abbiamo presentato AppWeb, un Web server sicuro e modulare, e abbiamo descritto i passaggi per la sua installazione. In questa seconda parte vedremo come configurarlo, avviarlo e come usare la possibilità dell'embedded JavaScript.

Avviamo AppWeb

Soffermiamoci un attimo sulle modifiche apportate al sistema. Innanzitutto noteremo la creazione della directory /var/www/appweb-default, che rappresenta la directory radice del nuovo web server. In /etc/appweb troveremo il file appweb.conf utilizzato per la configurazione di AppWeb ed equivalente ad httpd.conf di Apache. Fortuna vuole che la sintassi sia praticamente identica a quella di Apache permettendoci di sfruttare l'esperienza acquisita con quest'ultimo. Direttive simili alle seguenti dovrebbero apparirvi del tutto familiari:

ServerRoot "/etc/appweb"
ErrorLog "/var/log/appweb/error.log"
Listen 7777
DocumentRoot "/var/www/appweb-default"

Prima di avviare il web server scopriamo dove si è sistemato l'eseguibile, anche se a onor del vero non ci vuole molta fantasia:

[root]# which appweb
/usr/sbin/appweb

e finalmente lanciamo AppWeb digitando:

[root]#/usr/sbin/appweb -f appweb.conf -l stdout:2

Vedremo a schermo una sequenza di messaggi che indicano le varie opzioni attivate, i moduli caricati dinamicamente, eventuali errori e così via. Per informazione i moduli si trovano nella directory /usr/lib/appweb/modules come si evince facilmente dalla direttiva LoadModulePath "/usr/lib/appweb/modules".

Se in fase d'installazione avessimo scelto di lanciare AppWeb al boot e quindi d'inserirlo tra i servizi, potremmo usare i consueti comandi per fermarlo ed avviarlo:

[root]#service appweb stop|start

Testiamo AppWeb

È giunto il momento della verità: proviamo il funzionamento del web server, per ora localmente. Digitiamo http://localhost:7777/ nella barra dell'indirizzo del browser e, se otterremo in risposta la pagina "Mbedthis Appweb Sample Home Page", allora tutto è filato liscio. AppWeb accetta regolarmente connessioni sulla porta 7777. Verifichiamo anche la connessione SSL digitando https://localhost:4443/ e, dopo aver accettato i certificati autofirmati, dovremmo visualizzare la medesima pagina.

Se, come consigliato inizialmente, avete scelto d'installare la documentazione allora potrà essere utile utilizzare il link in home page per raggiungerla e consultarla.

Procediamo con il test delle caratteristiche del programma utilizzando alcuni file allo scopo predisposti nella directory radice del web server. Con http://localhost:7777/test.php possiamo verificare il funzionamento di PHP. Tale file richiama la classica funzione phpinfo() che ci fornirà tutte le informazioni sul modulo. In particolare scopriremo che il file di configurazione php.ini su cui dovremo eventualmente agire si trova in /etc/appweb/.

Digitando http://localhost:7777/features.esp possiamo vedere all'opera le Embedded Server Pages e provarne alcune caratteristiche utilizzando i file simple.esp e test.esp.

Per esempi un po' più complessi sull'utilizzo di C, C++, ESP potete consultare il contenuto della directory /usr/share/appweb/samples installata con il pacchetto appweb-dev-2.4.2-2-LINUX-i686.rpm.

Embedded JavaScript

In chiusura soffermiamoci brevemente su una particolarità di AppWeb già menzionata: l'implementazione dell'Embedded JavaScript. Grazie al meccanismo delle Embedded Server Pages, JavaScript può accedere alle variabili HTTP e gestire dati dinamici in modo simile ai più tradizionali linguaggi di scripting server side. Embedded JavaScript utilizza un sottoinsieme delle istruzioni JavaScript o meglio ECMAScript, che ne rappresenta la standardizzazione (ECMA-262). L'intento è quello di implementare gli elementi essenziali del linguaggio per renderlo adatto ai sistemi embedded, riducendo l'ingombro che determinerebbe il supporto alla sintassi completa. Ovviamente risulterà sempre possibile espandere il linguaggio con proprie funzioni e definizioni di oggetti o, al limite, creare proprie funzioni JavaScript usando il linguaggio C.

Embedded JavaScript può risultare uno strumento molto utile poiché garantisce rapidità di sviluppo, minima richiesta di risorse, sicurezza e affidabilità. Di seguito un banale esempio che possiamo eseguire salvando il testo in un file denominato prova.esp e poi richiamandolo dal browser:

<%
function Prova()
{
  var str = '<h1>Hello World</h1><p>Oggi proviamo Embedded JavaScript</p>';
  return str;
}


write(Prova());

%>

Se volete percorrere la strada dell'Embedded JavaScript vi consiglio un'attenta lettura della documentazione per determinare quali istruzioni o funzioni siano disponibili e per stabilire eventuali limiti di un simile approccio.

Al termine della sperimentazione possiamo tranquillamente decidere di rimuovere AppWeb. In questo caso basterà ricorrere allo script remove che effettuerà un rpm -e sui pacchetti installati ed una pulizia delle directory create:

[root]# ./remove

Termina qui la breve panoramica su AppWeb, che ha avuto principalmente lo scopo d'illustrare le potenzialità del software. Come al solito il mondo dell'open source si presenta ricco di soluzioni che possono adattarsi alle particolari esigenze di un programmatore o di un sistemista.

Ti consigliamo anche