Michele Liberi software
versione 1.04, giugno 2026
|
|
Michele Liberi
mail: mliberi@gmail.com
cell: +393485211456
telegram: @MicheleLiberi
|
liberix
- Presentazione
- Librerie
- Servizi
- plisten, port listener
- rxs, esecuzione remota di comandi
- lrm, gestore di risorse logiche
- cofs, filesystem cooperativo distribuito
- yaws, yet another web server
- wwws, world wide web server
- gcron, schedulatore globale
- respawn, daemon monitoring
- smsd, invio e ricezione SMS
- alsad, sintetizzatore di suoni
- Comandi
- X client
- Applicazioni web
- Siti web
- Applicazioni Android
- Programmi DOS
- Programmi Windows
- Installazione
- Licenza d'uso
yaws è l'acronimo di yet another web server, si tratta di un dèmone che risponde a richieste HTTP e/o 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.
yaws 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 yaws sono:
Il tentativo da parte del client di usare altri metodi (PUT, DELETE, TRACE) produce l'errore 501 (Not Implemented).
Quando viene lanciato yaws 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.
yaws 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 yaws occupa 832KB.
Con questi livelli di consumo di memoria può girare anche su computer con ridottissime risorse hardware, ad esempio un raspberry PI zero.
yaws legge i parametri di configurazione dal file /etc/yaws.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 yaws userà il default /etc/mime.types.
- logfile fn
- Il nome del file dove yaws 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:
- yyyy: anno
- mm: mese
- dd: giorno del mese
- jjj: giorno dell'anno
- HH: ore
- MM: minuti
- SS: secondi
In questo modo yaws andrà a creare nuovi file di log in base al timestamp della richiesta.
- listen [host][:PORT] [crt key]
- Indica su quale interfaccia di rete e su quale porta yaws si mette in ascolto in attesa di nuove connessioni TCP/IP.
Questo parametro può essere ripetuto nel caso si voglia che yaws accetti connessioni su più interfacce o su porte diverse.
Se questo parametro viene omesso, yaws accetterà connessioni sulla porta 80 (standard per questo servizio) di tutte le interfacce di rete disponibili.
Gli argomenti opzionali crt e key indicano rispettivamente il certificato SSL e la chiave privata per gestire connessioni cifrate.
In questo caso la porta di default è la 443.
- https vhost crt key
- Questo parametro permette di indicare un diverso certificato SSL, e relativa chiave privata, in base al virtual host (informazione contenuta nella request).
In assenza di questa direttiva yaws utilizza il certificato SSL e relativa chiave specificate nella direttiva listen.
- stats [host][:PORT]
- La direttiva stats indica a yaws di mettersi in ascolto su un'ulteriore interfaccia di rete e porta. Ad ogni client che si connette yaws 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).
yaws 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:
- REMOTE_ADDR: indirizzo IP del client
- SERVER_ADDR: indirizzo IP sul quale è arrivata la connessione TCP/IP
- SERVER_PORT: porta sulla quale è arrivata la connessione TCP/IP
- REQUEST_METHOD: {HEAD, GET, POST}
- REQUEST_SCHEME: {HTTP, HTTPS}
- REQUEST_URI: URI della pagina richiesta
- QUERY_STRING: parte della richiesta che contiene variabili e valori
- HTTP_HOST: il nome del virtual host contenuto nel header della richiesta, comprende anche il numero di porta
- SERVER_NAME: il nome del virtual host contenuto nel header della richiesta, senza il numero di porta
- HTTP_COOKIE: eventuali cookie contenuti nel header della richiesta
- HTTP_USER_AGENT: identificativo del browser dal quale proviene la richiesta
- HTTP_AUTHORIZATION: eventuale token contenuto nella richiesta
- CONTENT_TYPE: indica il tipo di richiesta
- CONTENT_LENGTH: lunghezza in byte della richiesta
- PATH_INFO: parte dell'URI eccedente il path dep programma CGI
- SCRIPT_NAME: il nome del programma CGI
- SCRIPT_FILENAME: il nome completo di path del programma CGI
- UNIQUE_ID: una stringa univoca ogni volta diversa
- SSL_TLS_SNI: il nome del virtual host, solo se la richiesta è arrivata su connessione cifrata
- DOCUMENT_ROOT: la directory root del filetree gestito da yaws
- PATH: per motivi di sicurezza yaws imposta un PATH minimale (PATH=/bin:/usr/bin); si possono aggiungere ulteriori directory con la direttiva apath
- USER: lo username dell'utente proprietario del processo
- LANG, TZ: valore ereditato dal 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 yaws
- 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 yaws.
- 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