Come esempio di esecuzione di uno script CGI e di generazione di pagine HTML con le statistiche di accesso al web server, si userà il pacchetto Analog (http://www.analog.cx) che fornisce sia un eseguibile binario (installato in /usr/bin/analog su Fedora Linux 12) che uno script CGI installato in /var/www/cgi-bin/anlgform.pl .
Il file eseguibile binario si può adoperare per generare periodicamente una pagina HTML statica di statistiche sfruttando il servizio di sistema cron . Lo script Perl è stato invece progettato per essere usato come script CGI per generare dinamicamente pagine di statistiche HTML.
Nel seguito si tratteranno dunque i temi seguenti:
configurazione di Apache per l'esecuzione di applicativi CGI (Common Gateway Interface);
installazione di un analizzatore dei file di log di Apache e generatore di pagine HTML di statistiche;
configurazione del crontab di sistema per l'esecuzione cronologica della generazione delle statistiche;
preparazione di una pagina web per la visualizzazione delle statistiche.
Nel file di configurazione del web server Apache (/etc/httpd/conf/httpd.conf nella distribuzione Fedora 12) si può intervenire in due modi per permettere al web server di eseguire comandi locali invece di fornirne il contenuto al client come fossero documenti qualsiasi:
si definisce una certa directory del filesystem del server come uno ScriptAlias;
si aggiunge l'opzione ExecCGI ad una direttiva Directory o Location;
si definisce un'estensione del nome di certi file eseguibili come indicativi del fatto che siano script CGI, ovunque si trovino nel filesystem del web server.
Un esempio del caso (1) è la direttiva seguente:
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" |
Nella direttiva Directory non serve attivare l'opzione ExecCGI perché alla directory di riferimento /var/www/cgi-bin è già stato dichiarato uno ScriptAlias nella directory /cgi-bin/.
Un esempio del caso (2) è la direttiva seguente, in cui si definiscono le cartelle /home/*/public_html/cgi-bin come contenitori di script CGI:
<Directory /home/*/public_html/cgi-bin> |
Un esempio del caso (3) è la direttiva seguente:
AddHandler cgi-script .cgi .sh .awk .pl |
Supponiamo che siano state abilitate le pagine utente sul web server cui sono fatte corrispondere le directory di default public_html, e che un utente di nome webroot abbia questo file index.html nella propria directory ~/public_html:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
Il file netstat.sh contiene lo script che segue:
#!/bin/dash |
La pagina web si presenterà in questo modo:
Pagina di controllo dello stato del server. Menù del sitoStato delle
connessioni di rete del server |
Mandando in esecuzione lo script netstat.sh il server HTTP otterrà in output la pagina web dinamica, che sarà simile a quella riprodotta nell'illustrazione 1.
Illustrazione 1: netstat.sh
Usando la stessa pagina html del paragrafo precedente, mandando in esecuzione il secondo script lì disponibile, ossia anlgform.pl, si apre una pagina riportante i risultati dell'analisi dei log effettuata dal comando analog.
Da notare che mettendo nel file di configurazione generale di analog, ossia in /etc/analog.cfg, la riga:
LOGFILE access_log |
il comando analog andrà a leggere i dati da analizzare nel file /var/log/httpd/access_log, ossia assume di default che il file risieda nella directory /var/log/httpd. Si ricordi che analog si legge il file di configurazione globale /etc/analog.cfg sia quando è mandato in esecuzione da una pagina del sito di default (in /var/www/) che quando è mandato in esecuzione dal sito di un utente (in ~utente/public_html) che da un sito virtuale (ovunque sia collocato sul filesystem). E perciò le voci di default di questo file di configurazione varranno per tutti i siti gestiti dal web server. In genere questo non è quello che si desidera. Ad esempio, potendo il web server gestire i log dei siti virtuali in file specifici diversi da dominio a dominio, si vorrà con ogni probabilità usare questi file per avere le statistiche di un sito specifico, invece di avere le statistiche generali di tutto il server. Inoltre si vorrà anche cambiare il nome dell'HOST e la sua HOSTURL sulla pagina delle statistiche perché riflettano il nome e la URL del sito virtuale cui si riferiscono le statistiche.
Nel seguito si esporranno due modi in cui si può far analizzare ad analog il file /var/www/log/sito.log invece di quello di default /var/log/httpd/access_log:
si fa uso dell'ultimo link a disposizione nella pagina index.html del sito e si edita il file anlgform.html installato dal pacchetto analog che si è copiato nella directory del sito cambiando nella riga seguente il percorso e/o il nome del file di log da:
<input type=hidden name="LOGFILE" value="/var/www/access_log"> |
a:
<input type=hidden name="LOGFILE" value="/var/www/log/sito.log"> |
(si tenga a mente il fatto che i log in /var/log/httpd/ sono di solito inaccessibili agli utenti non privilegiati e quindi anche al processo analog);
editando lo stesso file per aggiungere nel modulo la possibilità di specificare un file di propria scelta diverso da quello di default modificando la riga:
<input type=hidden name="LOGFILE" value="/var/www/log/access_log"> |
in, ad esempio:
Logfile name: <input type=text name="LOGFILE" |
È opportuno anche fare in modo che il titolo della pagina delle statistiche rifletta il nome e l'indirizzo del sito, piuttosto che lasciare quello di default specificato nel file di configurazione.
Nel file di configurazione /etc/analog.cfg questi dati sono specificati nelle due righe seguenti:
HOSTNAME "localhost.localdomain" |
Se si è configurato il web server per gestire numerosi siti, per diversi utenti o siti virtuali, si deve specificare di volta in volta ad analog quali valori queste voci devono avere. A mano, direttamente sulla riga di comando, per generare un tale file di log si farebbe così (tutto sulla stessa riga):
[utente@server ~]$ analog +C'HOSTNAME "Miosito.it"' \ |
Questa riga di comando istruisce analog a produrre il file di statistiche public_html/statistiche.html a partire dai dati di log contenuti nel file public_html/accessi_log. Inoltre deve prima cambiare il valore della voce HOST con la stringa “Miosito.it” e della voce HOSTURL con la stringa “http://miosito.it”, ignorando i valori che queste voci possono avere nel file di configurazione.
Si faccia attenzione a NON lasciare spazi tra gli switch +C e +O e i loro parametri! In questo caso analog non si comporta come il tipico comando UNIX.
Il file con il modulo html anlgform.html installato dal pacchetto analog è predisposto per permettere all'utente di cambiare il nome del sito (ossia la variabile HOSTURL) nella quarta ed ultima sezione della pagina, Layout (si veda l'illustrazione 2).
Illustrazione 2:
anlgform.html
Per attribuire alla variabile HOSTURL un valore di default (che non è impostato nel file del modulo e che quindi assume il nome di host del server, in generale diverso dal nome di un dominio virtuale), vi si cambia la riga:
<br>URL: <input type=TEXT name="HOSTURL" size=60> |
in:
<br>URL: <input type=TEXT name="HOSTURL" value="http://miosito.it" size=60> |
La stessa cosa si può fare con la variabile HOSTNAME, cambiando nel file del modulo html la riga:
<input type=TEXT name="HOSTNAME" size=60> |
in:
<input type=TEXT name="HOSTNAME" value="miosito.it" size=60> |
La pagina con il modulo html alla fine si presenta, nella sua parte finale, senza input da parte dell'utente:
Illustrazione 3: anlgform.html - modificato
Illustrazione 4: report finale
Nel caso si volesse generare una pagina di statistiche non dinamicamente via web ma ad ogni dato momento, ad esempio ogni giorno a mezzanotte, allora si può configurare un cron job come il seguente nel file di configurazione del cron di sistema /etc/crontab1:
0 0 * * * root /usr/bin/analog -G +g~tecnico/.analogrc \ |
Questo cronbjob esegue alle 0:0 di ogni giorno (ossia a mezzanotte, alcuni cron ammettono come equivalente l'ora 0 24) il comando analog che:
-G: ignora il file di configurazione globale /etc/analog.cfg;
+g: aggiunge ~tecnico/.analogrc alla lista dei file di configurazione da leggere;
+O: scrive l'output nel file ~tecnico/public_html/statistiche_$(date '+%Y %m %d').html;
legge i dati dal file di log /var/log/httpd/miosito.it-access_log.
Il file di configurazione ~tecnico/.analogrc potrebbe essere una copia di quello globale /etc/analog.cfg cui sono state modificate le voci:
LOGFILE, commentata per evitare un messaggio di avvertimento in fase di esecuzione e prodotto perché il relativo valore è fornito sulla riga di comando;
OUTFILE, commentata per le stesse ragioni del punto precedente;
HOSTNAME "Miosito.it", che potrebbe essere anch'essa commentata e fornita sulla riga di comando con l'opzione +C'HOSTNAME "Miosito.it"';
HOSTURL "http://miosito.it/", che potrebbe essere anch'essa commentata e fornita sulla riga di comando con l'opzione +C'HOSTURL "http://miosito.it"'.
Sarà quindi responsabilità del
webmaster (di chi sviluppa il sito, cioè) rendere le pagine
così generate disponibili ad una precisa pagina del sito stesso.
Torna
all'indice