[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 328.   Servente HTTP: Boa

Boa (1) è un servente HTTP elementare ma efficace, in grado di offrire le funzionalità tipiche di questo servizio. Si compone fondamentalmente di un demone, boa, e di un file di configurazione, /etc/boa/boa.config. Solitamente, al demone si affianca anche un programma utile per la generazione degli indici: boa_indexer.

Nella sua semplicità, Boa mantiene alcune convenzioni comuni ad altri sistemi del genere. In particolare, esiste una directory di origine del programma servente (server root), intesa idealmente come la directory corrente in diverse situazioni; nello stesso modo esiste una directory di origine per i documenti pubblicati (document root).

Dalle direttive del file di configurazione si possono intendere in modo molto semplice le sue caratteristiche.

328.1   Configurazione di Boa

Il file di configurazione di Boa va collocato in base alle scelte fatte in fase di compilazione. In generale dovrebbe trattarsi precisamente di /etc/boa/boa.conf. Come in molti altri casi, le righe vuote e quelle bianche sono ignorate, inoltre i commenti iniziano con il simbolo # e terminano alla fine della riga. Per il resto, le direttive possono avere una di queste due forme:

nome valore_assegnato
nome

Nel primo caso si attribuisce un valore a ciò che viene rappresentato dal nome a sinistra; nel secondo si intende abilitare un'opzione booleana.

L'unica cosa che non si può modificare con la configurazione è la definizione della directory di origine del servente, che viene definita in fase di compilazione del programma. In alternativa, si può usare l'opzione -c directory per imporla all'avvio del demone boa.

Nel seguito vengono descritte alcune delle direttive di configurazione di Boa.

Direttiva Descrizione
Port n
Stabilisce la porta di comunicazione attraverso la quale il demone deve restare in ascolto di richieste di connessione. Il valore predefinito di questa è notoriamente 80. Se il numero di questa porta è inferiore a 1 024, il demone boa deve essere stato avviato con i privilegi dell'utente root.
Listen indirizzo_ip
Questa direttiva permette di limitare l'ascolto alle connessioni dirette a un solo indirizzo IP locale particolare. Ciò potrebbe servire per distinguere un servizio particolare per un solo dominio virtuale (ma la gestione dei domini virtuali conviene attuarla in modo differente). In generale, non usando questa direttiva, si fa in modo che Boa accetti connessioni destinate a qualunque indirizzo che faccia capo al nodo in cui si trova a funzionare.
User utente
Group gruppo
Queste due direttive, servono rispettivamente per stabilire i privilegi dell'utente e il gruppo da utilizzare per il funzionamento di Boa. In pratica, queste direttive hanno significato solo se Boa è stato avviato inizialmente con i privilegi dell'utente root. In particolare, va osservato che l'utente e il gruppo possono essere specificati per nome o per numero (UID e GID).
AccessLog registro_degli_accessi
Definisce la collocazione del file delle registrazioni degli accessi. Se non si usa un percorso assoluto, il punto di riferimento iniziale è la directory di origine del programma servente.
VerboseCGILogs
Si tratta di un'opzione booleana. Se appare nel file di configurazione, serve a richiedere la registrazione dettagliata dell'avvio e della conclusione dei programmi CGI.
CgiLog registro_errori_cgi
Definisce la collocazione del file delle registrazioni relativo agli errori dei programmi CGI. Per la precisione, vengono registrati in questo file i messaggi emessi attraverso lo standard error di questi programmi. Se non si usa questa direttiva, i messaggi in questione vengono perduti.
Il file indicato, andrebbe annotato opportunamente con tutto il suo percorso assoluto; altrimenti si intende che la directory di riferimento sia la directory di origine del programma servente.
ServerName nome
Specifica il nome del nodo servente da inviare ai clienti, se questo differisce da quanto prevederebbe la risoluzione dell'indirizzo IP.
DocumentRoot directory
Stabilisce la directory di partenza per i documenti pubblicati attraverso il servizio HTTP. Se non si indica un percorso assoluto, si intende che il riferimento iniziale sia relativo alla directory di origine del servente.
VirtualHost
Questa opzione booleana, se presente, fa in modo che le richieste di accesso abbiano di fronte una gerarchia differente, in base all'indirizzo IP utilizzato effettivamente. Per la precisione, si tratta di directory_origine_documenti/indirizzo_ip/.
Per esempio, se con la direttiva DocumentRoot è stata fissata come origine dei documenti la directory /var/www/ e l'accesso proviene attraverso l'indirizzo IP locale 192.168.2.1, il programma cliente che fa una richiesta per l'indirizzo http://192.168.2.1/, vede in pratica la directory /var/www/192.168.2.1/.
UserDir directory
Stabilisce la directory di partenza per i documenti pubblicati dagli utenti. Si tratta di ciò che poi si risolve con gli indirizzi nella forma http://nodo/~utente/. Solitamente si fa riferimento alla directory public_html/.
DirectoryIndex file_indice
Si tratta del nome del file da prendere in considerazione come indice delle directory. In generale si tratta di index.html e la sua presenza evita di mettere allo scoperto il contenuto reale delle directory.
DirectoryMaker programma

Questa direttiva serve a indicare quale programma usare per generare il file HTML contenente l'indice dei file di una directory, quando non è già disponibile un file adeguato per questo scopo (si veda la direttiva DirectoryIndex).
In generale, dovrebbe già essere disponibile per questo scopo il programma boa_indexer (/usr/lib/boa/boa_indexer); tuttavia è possibile realizzare il proprio, tenendo conto che deve accettare due argomenti:

programma directory_da_indicizzare titolo

Si intuisce che il primo argomento sia indispensabile, mentre il secondo rappresenti solo un elemento opzionale, che non è indispensabile alla costruzione dell'indice. Naturalmente, il programma in questione, deve emettere la pagina HTML attraverso lo standard output.

MimeTypes file
Questa direttiva serve per fornire la collocazione del file dei tipi MIME. In condizioni normali si tratta di /etc/mime.types, ma va comunque indicato.
DefaultType tipo_mime
Specifica il tipo MIME da utilizzare quando l'estensione del file è sconosciuta, oppure manca del tutto. Solitamente, per questa direttiva si utilizza la definizione text/plain.
AddType tipo_mime estensione...
Permette di aggiungere altri tipi MIME, anche utilizzando più volte lo stesso tipo di direttiva, senza dover intervenire nel file /etc/mime.types.
Redirect percorso_originale \
  \uri_nuovo

Consente di definire una ridirezione di un indirizzo locale che recentemente è stato spostato altrove. Per esempio, se la directory locale brot/, a partire dall'origine dei documenti, è stata spostata in un altro sito, precisamente in http://www.brot.dg/vecchi/, si può usare la direttiva seguente:

Redirect /brot http://www.brot.dg/vecchi
Alias percorso_reale \
  \percorso_alternativo_nel_file_system

Consente di definire un percorso alternativo per i dati, esattamente come si fa con i collegamenti simbolici nel file system. Tuttavia, si possono benissimo usare proprio i collegamenti simbolici per gestire questa cosa in modo più semplice.

Per esempio, la direttiva seguente fa in modo che richiedendo la risorsa http://nodo/pippo, si acceda in pratica alla directory del file system corrispondente a /home/pippo/dati/:

Alias /pippo /home/pippo/dati
ScriptAlias percorso_reale \
  \percorso_alternativo_nel_file_system

Si tratta di una variante della direttiva Alias, in cui si vuole fare precisamente riferimento alla directory contenente i programmi CGI. Nell'esempio seguente, si vuole fare in modo che http://nodo/cgi-bin/ corrisponda nel file system a /usr/lib/cgi-bin/:

ScriptAlias /cgi-bin /usr/lib/cgi-bin

Per completare la descrizione sulla configurazione di Boa, si mostra un esempio relativamente completo, ma con meno commenti di quello reale.

# Port: The port Boa runs on.  The default port for http servers is 80.
# If it is less than 1024, the server must be started as root.
Port 80

#  User: The name or UID the server should run as.
# Group: The group name or GID the server should run as.
User www-data
Group www-data

# ErrorLog: The location of the error log file. If this does not start
# with /, it is considered relative to the server root.
# Set to /dev/null if you don't want errors logged.
# If unset, defaults to /dev/stderr
ErrorLog /var/log/boa/error_log

# AccessLog: The location of the access log file. If this does not
# start with /, it is considered relative to the server root.
# Comment out or set to /dev/null (less effective) to disable 
# Access logging.
AccessLog /var/log/boa/access_log

# DocumentRoot: The root directory of the HTML documents.
# Comment out to disable server non user files.
DocumentRoot /var/www

# UserDir: The name of the directory which is appended onto a user's home
# directory if a ~user request is recieved.
UserDir public_html

# DirectoryIndex: Name of the file to use as a pre-written HTML
# directory index.  Please MAKE AND USE THESE FILES.  On the
# fly creation of directory indexes can be _slow_.
# Comment out to always use DirectoryMaker
DirectoryIndex index.html

# DirectoryMaker: Name of program used to create a directory listing.
# Comment out to disable directory listings.  If both this and
# DirectoryIndex are commented out, accessing a directory will give
# an error (though accessing files in the directory are still ok).
DirectoryMaker /usr/lib/boa/boa_indexer

# MimeTypes: This is the file that is used to generate mime type pairs
# and Content-Type fields for boa.
# Comment out to avoid loading mime.types (better use AddType!)
MimeTypes /etc/mime.types

# DefaultType: MIME type used if the file extension is unknown, or there
# is no file extension.
DefaultType text/plain

# ScriptAlias: Maps a virtual path to a directory for serving scripts
# Example: ScriptAlias /htbin/ /www/htbin/
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

328.2   Avvio e gestione del servizio

Il demone boa è ciò che svolge tutto il lavoro. In generale si avvia senza argomenti, oppure si specifica la directory di origine del servente:

boa [-c directory_origine_servente]

Naturalmente, è normale che sia avviato con i privilegi dell'utente root.

Per la gestione del servizio si utilizza normalmente la procedura di inizializzazione del sistema. Semplificando molto le cose, lo script che attiva e disattiva il funzionamento di Boa potrebbe essere simile all'esempio seguente:

#! /bin/sh

case "$1" in
    start)
        echo "Avvio del servizio HTTP."
        /usr/sbin/boa
        ;;
    stop)
        echo "Arresto del servizio HTTP."
        killall boa
        ;;
    *)
        echo "Utilizzo: /etc/init.d/boa {start|stop}"
        exit 1
esac

exit 0

328.3   Registro degli accessi

Il servente Boa utilizza un file unico per la registrazione degli accessi, che contiene le stesse informazioni di un registro in formato «combinato» (sezione 340.1), che però ha l'aggiunta iniziale dell'indirizzo richiesto effettivamente.

Il programma Perl seguente, crea una serie di file, conformi al formato combinato, ognuno dei quali ha un nome che corrisponde all'indirizzo del dominio virtuale interpellato:

#!/usr/bin/perl

$riga = "";
$indirizzo = "";
while ($riga = <STDIN>)
  {
    if ($riga =~ m{^([0-9a-fA-F.:]+) (.*)$})
      {
        $indirizzo = $1;
        $riga = $2;
        open (TEMP_FILE, ">> $indirizzo");
        print TEMP_FILE ($riga);
        print TEMP_FILE ("\n");
        close (TEMP_FILE);
      }
  }

Se questo programma viene chiamato pre_filtro e il file delle registrazioni è /var/log/boa/access_log, per una serie di file delle registrazioni nella directory /var/log/boa/access_log/domini/, si potrebbero usare i comandi seguenti, per cancellare prima i file vecchi e per generare poi quelli nuovi:

rm -rf /var/log/boa/access_log/domini[Invio]

mkdir /var/log/boa/access_log/domini[Invio]

cd /var/log/boa/access_log/domini[Invio]

cat ../access_log | pre_filtro[Invio]

Si ricordi comunque che la gestione dei domini virtuali di Boa è limitata al fatto che ogni dominio deve fare riferimento a un indirizzo IP differente.

328.4   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Boa   GNU GPL


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome servente_http_boa.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!