Michele Liberi software

versione 1.04, giugno 2026

Michele Liberi
mail: mliberi@gmail.com
cell: +393485211456
telegram: @MicheleLiberi

liberix

wwws, world wide web server

wwws è un semplice web server, si tratta di un dèmone che risponde a richieste HTTP. È pensato per essere installato in ambienti intrinsecamente protetti dove non è necessario il sovraccarico computazionale del protocollo cifrato HTTPS.

È in grado di servire sia pagine statiche che programmi CGI (Common Gateway Interface), che generano su standard output un bytestream da inviare al browser.

N.B.: pagine statiche e pagine dinamiche convivono nello stesso filetree che ha come radice il valore del parametro root. wwws tratta come eseguibili che producono pagine dinamiche i file che hanno il permesso di esecuzione, e come pagine statiche i file che non hanno il permesso di esecuzione.

I metodi HTTP gestiti da wwws sono:

Il tentativo da parte del client di usare altri metodi (PUT, DELETE, TRACE) produce l'errore 501 (Not Implemented).

Quando viene lanciato wwws si pone immediatamente in background, e rimane attivo a tempo indeterminato, in attesa di richieste da gestire. Per terminare l'esecuzione basta inviargli un segnale SIGTERM con il comando kill. Se sta girando in foreground (opzione -f) basta un CTRL-C.

wwws utilizza molta meno memoria rispetto ad apache e anche la configurazione è estremamente più semplice. Giusto per avere un ordine di grandezza di questo minor consumo di memoria ho misurato la memoria allocata su un computer da me gestito. A parità di livello di servizio apache occupa circa 128MB mentre wwws occupa 632KB. Con questi livelli di consumo di memoria può girare anche su computer con ridottissime risorse hardware, ad esempio un raspberry PI zero.

wwws legge i parametri di configurazione dal file /etc/wwws.conf, oppure da un altro file (opzione -c).

Alcune direttive contenute nel file di configurazione vengono lette solo una volta, nel momento in cui il dèmone viene avviato, altre invece vengono lette ad ogni richiesta.

Direttive una tantum:

chdir dir
Esegue la funzione chdir(dir), che cambia la directory corrente del processo, il che significa che tutti i nomi dei file saranno relativi a questa directory base. Se la funzione fallisce il programma termina immediatamente.
include fn
Legge le direttive presenti nel file fn, come se fossero nel file di configurazione.
mime fn
Il file fn contiene la definizione di tutti i mime types. Si tratta di una mappatura tra l'estensione del nome del file ed il tipo di dato che verrà comunicato al browser nel header della risposta. Il parametro è rilevante solo quando viene richiesta una pagina statica, nel caso di pagine dinamiche è il progamma che indica nel header il mime type corretto.

Se questo parametro viene omesso wwws userà il default /etc/mime.types.

logfile fn
Il nome del file dove wwws andrà a registrare tutte le richieste che riceve e l'esito delle richieste. Il parametro fn può contenere dei segnaposto che verranno riempiti al momento della richiesta:

In questo modo wwws andrà a creare nuovi file di log in base al timestamp della richiesta.

listen [host][:PORT]
Indica su quale interfaccia di rete e su quale porta wwws si mette in ascolto in attesa di nuove connessioni TCP/IP. Questo parametro può essere ripetuto nel caso si voglia che wwws accetti connessioni su più interfacce o su porte diverse.

Se questo parametro viene omesso, wwws accetterà connessioni sulla porta 80 (standard per questo servizio) di tutte le interfacce di rete disponibili.

stats [host][:PORT]
La direttiva stats indica a wwws di mettersi in ascolto su un'ulteriore interfaccia di rete e porta. Ad ogni client che si connette wwws invierà alcuni dati statistici raccolti durante il suo funzionamento.
maxchildren N
Questo parametro serve per limitare il numero massimo di richieste attive che possono essere servite in parallelo provenienti dallo stesso client. In questo modo è possibile limitare l'effetto di attacchi del tipo DDOS.

Direttive lette ad ogni richiesta HTTP o HTTPS:

include fn
Legge le direttive presenti nel file fn, come se fossero nel file di configurazione.
if VAR REE
Tutte le direttive contenute nel blocco if verranno lette se, e solo se, il valore contenuto nella variabile VAR soddisfa la REE (espressione di espressioni regolari).

wwws definisce autonomamente un insieme di variabili d'ambiente, che vengono passate al programma CGI che gestisce la richiesta, il cui valore può essere utilizzato in questo contesto:

or VAR REE
Aggiunge una condizione in OR logico alla condizione dell'ultimo blocco if
and VAR REE
Aggiunge una condizione in AND logico alla condizione dell'ultimo blocco if
endif
Chiude il blocco if. N.B. la direttiva if chiude automaticamente un eventuale blocco precedentemente aperto.
root dir
Imposta la directory base del filetree gestito da wwws
user username
Imposta il nome dell'utente proprietario del processo che gestisce la richiesta.
export VAR[=VALUE]
Aggiunge una variabile nell'insieme delle variabili d'ambiente che vengono passate al programma CGI. Se il valore non è specificato viene letto dall'environment corrente del processo wwws.
apath dir
Aggiunge una directory alla variabile d'ambiente PATH. Il valore di default è PATH=/bin:/usr/bin
reroute {host|=}[:port]
Consente di reindirizzare le richieste HTTP su HTTPS. Il carattere '=' in luogo del host indica lo stesso virtual host della richiesta.
index append_str
Il valore di default per questo parametro è index.html. È il nome del file da caricare se l'URI della richiesta è una directory.
defuri URI
Imposta la pagina da mandare al browser quando la richiesta contiene un URI non valido. Il comportamento di default è rispondere con l'errore 404 (Page Not Found).
allow RE
Questa direttiva può essere ripetuta più volte. Aggiunge la regular expression RE alla white list, ovvero alla lista degli indirizzi IP ai quali è consentito inviare delle richieste. Se la white list è definita la richiesta del client viene gestita solo se il suo IP soddisfa una delle RE presenti nella lista. In caso contrario viene restituito l'errore 403 (Forbidden).
deny RE
Questa direttiva può essere ripetuta più volte. Aggiunge la regular expression RE alla black list, ovvero alla lista degli indirizzi IP ai quali non è consentito inviare delle richieste. Se la black list è definita la richiesta del client viene gestita solo se il suo IP NON soddisfa nessuna delle RE presenti nella lista. In caso contrario viene restituito l'errore 403 (Forbidden).

Per ulteriori informazioni sulla sintassi di attivazione e sulle opzioni disponibili lanciare il comando con l'opzione -h.

(c) M. Liberi, last updated: 2026-06-12