Immagine della guida Webserver: differenze e caratteristiche del sito Cionfs.it

webserver

Webserver

Ogni sito web per funzionare correttamente ha bisogno di un webserver, un’applicazione software eseguita sul server fisico che gestisce in tempo reale le richieste di tutti i client collegati al sito, fornendo tutto il necessario per realizzare l’esperienza di navigazione a cui siamo comunemente abituati.

Un aspetto da non sottovalutare, quando si sceglie un servizio hosting, è proprio legato alla scelta del webserver che il servizio hosting stesso ha a disposizione.

L’offerta di webserver a disposizione di chi vuole avviare un progetto web è piuttosto variegata, e ogni software ha le sue peculiarità, che possono risultare più adatte in certe circostanze piuttosto che in altre.

Per questo, prima di effettuare una scelta così importante, è necessario essere sufficientemente informati su tutte le caratteristiche e il funzionamento dei software da installare sul server; anche perchè una volta deciso quale webserver si vorrà utilizzare non sarà possibile cambiarlo facilmente per il progetto scelto, a meno di non modificare gran parte delle impostazioni configurate fino a quel momento.

Prima di procedere con la descrizione dei webserver più utilizzati dagli sviluppatori di siti web, è doveroso precisare che con la parola ‘webserver’ si intende quel software che provvede a trasferire in modo statico le pagine del sito web al client che ne fa richiesta, anche detto ‘front-end’.

Questo significa che un sito che faccia uso solamente di un webserver senza moduli aggiuntivi installati, sarà in grado di mostrare agli utenti solo pagine statiche, cioè che non supportano alcuna interazione con l’utente, oltre ai collegamenti ipertestuali, perché non sono dotate di nessuna logica di controllo.

Per avere anche questa funzionalità aggiuntiva è necessario installare un software detto comunemente ‘application server’ accanto al webserver, che prevede l’utilizzo di altri linguaggi di programmazione per realizzare la parte ‘back-end’ del server, ma di cui non ci occuperemo in modo specifico.

Segue una descrizione di alcuni dei webserver più popolari e un confronto più approfondito tra questi su parametri d’interesse come prestazioni, sicurezza e compatibilità.

Immagine della guida Webserver: differenze e caratteristiche del sito Cionfs.it

Apache

Apache HTTP server è stato uno dei primi webserver ad essere sviluppato ed utilizzato su larga scala dai primi siti internet degli anni novanta, la sua prima versione risale al 1995, ed ha avuto un ruolo fondamentale nella diffusione di internet dei primi anni del ventunesimo secolo. Grazie alla sua semplicità infatti si prestava bene a gestire le richieste delle pagine web dell’epoca, molto più leggere e maneggevoli di quelle di adesso. Purtroppo però, a causa di questa impostazione orientata a soddisfare le esigenze di un web perlopiù statico, gli sviluppatori ammettono che l’architettura su cui si basa questo potente webserver non si è rivelata particolarmente scalabile, e ha fatto fatica ad aggiornarsi per tenere testa a pagine web sempre più pesanti e ai tempi di caricamento ridotti offerti dai webserver alternativi come NGINX o Litespeed.

Apache risulta essere uno dei webserver più utilizzati al mondo nonostante abbia diverse alternative, elencate sia in questo articolo sia presenti a questo link.

L’architettura process-based

Alla base del funzionamento di Apache c’è una architettura software di tipo process-based.

Questo significa che la gestione della connessione e l’interpretazione delle richieste dei client, insieme a tutte gli altri possibili processi che il webserver può svolgere, vengono eseguiti in sequenza, uno dopo l’altro nell’ordine di arrivo. Di conseguenza, a seconda della architettura della cpu del server, i processi vengono organizzati per essere eseguiti in modalità single-thread o multi-thread, ma sempre e comunque dando la precedenza alle richieste che arrivano prima. (impedendo la creazione di code prioritarie ad esempio)
Originariamente i server Apache funzionavano principalmente con una architettura single-thread, poichè la potenza di calcolo a disposizione era limitata, e le necessità del web non erano particolarmente onerose. Vista la velocità richiesta dagli utenti per le pesanti pagine web di oggi, invece, molti sviluppatori si rivolgono a moduli specializzati per integrare meccanismi di multi-threading nella gestione dei processi, grazie ai quali si possono migliorare molto le prestazioni di esecuzione, sebbene l’utilizzo di risorse e di potenza di calcolo aumenti proporzionalmente.

LAMP

Apache è un software open-source e, negli ultimi anni, la sua popolarità è cresciuta grazie alla piattaforma LAMP, acronimo per Linux, Apache, MySQL, Php, una serie di componenti software completamente open-source che viene utilizzata spesso nello sviluppo di siti e applicazioni web, grazie all’elevato livello di integrazione che è possibile ottenere combinando l’esecuzione di questi programmi.
Un esempio di utilizzo della piattaforma LAMP è WIkipedia, enciclopedia libera per eccellenza, come dichiarato dagli sviluppatori del progetto Wikimedia.

Immagine della guida Webserver: differenze e caratteristiche del sito Cionfs.it

NGINX

Questo webserver di origine russa si inserisce sul mercato dei servizi di hosting come principale alternativa ad Apache nel 2004, data della prima versione sviluppata e diffusa. La creazione di questo progetto nasce con lo scopo di colmare le lacune di Apache e di sviluppare, quindi, un software scalabile sin da subito, per far fronte alle sempre crescenti esigenze del world wide web. Nato per rispondere alle necessità di Rambler, un motore di ricerca russo, si è rapidamente diffuso anche in Europa e in America, grazie alla differente architettura software implementata, che organizza i processi in modo nettamente diverso da Apache.
NGINX nel complesso è molto di più di un semplice webserver, poichè raccoglie su di sè diverse funzionalità aggiuntive, come quelle di reverse proxy, mail proxy o load balancer, che lo rendono molto competitvo in termini di prestazioni e di flessibilità e adatto a ricoprire diversi ruoli chiave nello sviluppo di un server. Di contro, il suo utilizzo può apparire complesso a chi non ha molta esperienza in questo campo.

L’architettura event-driven

NGINX si basa su un’architettura software di tipo event-driven, cioè guidata da eventi, che possono essere intesi come le azioni di un utente, output di sensori o messaggi provenienti da altri thread. Attraverso un complesso sistema di cicli, o event loop, NGINX può gestire simultaneamente diverse richieste di connessione in un singolo thread, riducendo di molto il carico di lavoro sulla cpu ed aumentando così le prestazioni di esecuzione. Questo algoritmo asincrono di gestione degli eventi quindi non crea un nuovo thread per ogni richiesta, poichè con migliaia di richieste ogni secondo la cpu del server sarebbe rapidamente sovraccaricata di lavoro. Il funzionamento effettivo è piuttosto complesso e prevede l’implementazione di una struttura gerarchica di diversi processi eseguiti in concorrenza, cioè simultaneamente, con la peculiarità che parte del lavoro è demandata al sistema operativo in uso e al suo kernel, in modo da sfruttare al massimo tutta la potenza di calcolo a disposizione.

Grazie all’innovativo meccanismo di funzionamento, NGINX ha raggiunto la popolarità per il suo utilizzo da parte di Yahoo! che doveva gestire decine di migliaia di connessioni simultanee, in un web che si stava rapidamente evolvendo agli inizi degli anni 2000.

Immagine della guida Webserver: differenze e caratteristiche del sito Cionfs.it

Lighttpd

La prima release di Lighttpd (pronunciato ‘lighty’) risale al 2003, e da allora è sempre stato considerato uno dei webserver open-source più leggero in assoluto.

Rispetto agli altri è particolarmente ottimizzato per avere prestazioni soddisfacenti in ambienti di sviluppo con problemi di velocità, grazie all’utilizzo estremamente ridotto delle risorse del sistema.

Se, da una parte, questo consente a chiunque di avere il proprio webserver personale, potenzialmente installandolo su un pc dalle prestazioni limitate come un raspberry pi, dall’altra questa ottimizzazione estrema rende le funzionalità di Lighttpd molto ridotte.

Spesso infatti i grandi siti web si affidano ad altri webserver come Apache o NGINX, ma impiegano comunque anche Lighttpd per la sua rapidità nel caricare contenuti statici o applicazioni molto leggere.

L’architettura

Lighttpd opera su una architettura software a thread singolo basata sugli eventi, ciò significa che le nuove richieste di connessione non provocano la creazione di altre linee di esecuzione dei processi, che vengono invece eseguiti consecutivamente.

Benché sia nato come progetto di uno studente universitario, nel corso degli anni lighttpd é stato utilizzato per contribuire alla realizzazione di siti web di rilievo come YouTube o Wikipedia. Questo lo ha reso molto popolare come supporto aggiuntivo a webserver più complessi, poiché é in grado di svolgere alcune funzioni più rapidamente.

Immagine della guida Webserver: differenze e caratteristiche del sito Cionfs.it

Node.js

Node.js è un ambiente run-time JavaScript nato per applicazioni web come server, web chat o videogiochi integrati nel browser, anche detti browser games. E’ un software open-source, quindi è completamente gratuito e non necessita di alcuna licenza per essere utilizzato in qualsiasi tipo di progetto, ed è cross-platform, cioè è stato sviluppato appositamente per essere compatibile con qualsiasi piattaforma o sistema operativo, poichè si appoggia all’ambiente di sviluppo di Java, uno dei linguaggi di programmazione più diffusi al mondo per la sua perfetta integrazione con tutti i dispositivi elettronici.
Benchè sia prima di tutto un ambiente runtime per definizione, Node.js è molto utilizzato come webserver in progetti web che necessitano di un software per la gestione di pagine e contenuti dinamici, vista l’elevata reattività a richieste multiple da parte dei client.

L’architettura

Come NGINX anche Node.js si basa su una architettura software di tipo event-driven, con un approccio alle richieste di input e output detto asincrono non bloccante, poichè effettua operazioni su un event loop a thread singolo.
In altre parole, quando il webserver riceve una richiesta dal client, il processo facente parte dell’event loop viene eseguito per mezzo di un solo thread per volta; inoltre i processi sono gestiti in modo consecutivo (asincrono) e non parallelo, e se mai un thread o un processo dovessero fallire o essere sospesi temporaneamente, questo non comporta la sospensione di tutta la catena di processi (non bloccante), permettendo all’algoritmo di continuare a rispondere a tutte le richieste in entrata.

Ha anche numerose caratteristiche che lo rendono decisamente popolare tra gli sviluppatori che lo hanno scelto per i loro progetti. Ad esempio basti pensare al fatto che si basa sul linguaggio di programmazione JavaScript: questo lo rende uno strumento facilmente utilizzabile da chi ha già dimestichezza con Java, senza aver bisogno di apprendere un nuovo linguaggio di programmazione o nuove configurazioni di software. In più grazie alla facile integrazione con HTML e CSS e con gli script JavaScript, Jquery o Angular, con un solo linguaggio è possibile gestire interamente un server e un sito web, inglobando le componenti front end e back end del progetto: in questi caso si parla di full stack JavaScript.

Di contro alcuni sviluppatori lamentano la mancanza di una libreria standard completa a supporto di Java, rendendo più difficile la programmazione di metodi univoci per tutti, o la presenza di aggiornamenti delle API frequenti e spesso non retrocompatibili, obbligando a dover spesso fare debug del codice per controllare che tutto continui a funzionare come dovrebbe.
Inoltre l’approccio asincrono si sarebbe spesso dimostrato poco adatto alla gestione di molti di richieste molto elevate, a causa della mancanza del supporto alla programmazione multi-thread.

Immagine della guida Webserver: differenze e caratteristiche del sito Cionfs.it

Litespeed

Litespeed è un webserver proprietario con numerose funzionalità che lo rendono particolarmente adatto per siti web di ecommerce, poichè è in grado di supportare migliaia di connessioni simultanee con un utilizzo minimo delle risorse a disposizione.

Utilizza una architettura software event-driven come NGINX, ma ha l’innegabile vantaggio di poter supportare nativamente i file di configurazione di Apache, nonché tutti i software di terze parti che offrono un pannello di controllo per la gestione del webserver.

Questa caratteristica è stata appositamente implementata per permettere a chi avesse già un sito web o un’attività online configurata con Apache di poter cambiare webserver senza bisogno di dover modificare altri software già in uso, o peggio, di dover imparare da zero un set di programmi completamente diverso.

Questa soluzione è molto popolare sia tra le grandi aziende che hanno bisogno di gestire ingenti quantità di traffico, sia tra i piccoli imprenditori che vogliono aprire il proprio ecommerce.

Infatti, grazie alle funzionalità aggiuntive presenti nativamente nella installazione base, come il supporto alla retrocompatibilità o la protezione contro attacchi hacker di tipo brute-force o ddos, Litespeed si presta particolarmente bene ad integrarsi nei progetti web, senza aver bisogno di gestire moduli aggiuntivi.

Lscache

La rapidità di caricamento delle pagine web su server Litespeed si deve principalmente all’utilizzo delle lscache (LiteSpeed Cache), che provvede a fornire all’utente pagine precaricate, cioè già presenti in memoria perché utilizzate da altri utenti.

Ciò accade sia quando l’utente visita indirizzi del sito accessibili a tutti, sia quando accede alle proprie pagine dinamiche personali. Inoltre una volta terminato il tempo di vita utile delle cache, nell’eliminazione di queste, utilizza un sistema di tag per riconoscere tutti gli elementi relativi alle cache da eliminare, e li cancella.

Tuttavia le cache da eliminare non vengono gestite immediatamente, ma al contrario, per evitare di caricare eccessivamente il filesystem, vengono invece etichettate con un tag che indica quali dati devono essere cancellati.

In questo modo, oltre a risparmiare risorse nei momenti di traffico più elevato, è anche possibile recuperare facilmente i dati importanti che per un motivo o per un altro vanno perduti durante l’utilizzo dell’applicazione web.

Immagine della guida Webserver: differenze e caratteristiche del sito Cionfs.it

Webserver: Quale utilizzare?

Per capire qual è la soluzione più adatta a supportare la realizzazione di un progetto web è necessario innanzitutto analizzare accuratamente gli obiettivi da soddisfare e le caratteristiche che il sito deve avere, come ad esempio la gestione di diverse richieste contemporaneamente o le prestazioni nell’esecuzione di contenuti dinamici, senza contare la compatibilità con il sistema operativo in uso, essenziale per il buon funzionamento del software.

Inoltre, per fare una scelta consapevole, è molto importante consultare i risultati dei benchmark effettuati nelle condizioni di interesse per il progetto scelto, così da avere a disposizione una previsione più o meno accurata delle prestazioni del webserver nelle varie situazioni che possono presentarsi. Tuttavia, poichè questa operazione può rivelarsi molto lunga e dispendiosa in termini di tempo e risorse se eseguita prendendo in considerazione ogni singolo software presente sul mercato, può essere più conveniente confrontare prima di tutto le caratteristiche che riguardano la compatibilità con i vari componenti che andranno a formare il sistema di hosting, in modo da scartare fin da subito eventuali software non supportati dal sistema operativo o dal pannello di controllo scelto, ad esempio.

Una volta trovate alcune soluzioni che potrebbero essere adatte al sito web da creare, è il momento di esaminare le prestazioni effettive dei diversi software in contesti diversi. Segue quindi un confronto tra i webserver presi in esame, considerando la qualità dei parametri chiave nella buona riuscita di un progetto web.

Prestazioni

Grazie all’architettura basata su eventi, NGINX, Lighttpd e Litespeed solitamente sono tra i migliori nei benchmark che misurano la velocità di risposta alle richieste di numerosi client in contemporanea, mentre Apache e altri web server process-based faticano a raggiungere lo stesso livello di prestazioni; tuttavia ci sono diverse variabili da tenere in considerazione. Prima di tutto, nel consultare questo tipo di benchmark bisogna controllare quali moduli sono installati accanto ai webserver, poichè specialmente Apache e i suoi derivati possono contare su una gran quantità di moduli aggiuntivi che ne migliorano le prestazioni per determinate applicazioni.
Un esempio di ciò sta proprio nella gestione delle pagine web dinamiche, una funzionalità non nativamente supportata da un webserver, ma molto importante per le esigenze degli utenti; molti webserver, come Apache, necessitano di moduli aggiuntivi per gestire elementi dinamici nelle pagine che presentano agli utenti, una soluzione funzionale ma non molto efficiente con carichi di lavoro elevati; al contrario webservers come NGINX delegano completamente il compito di elaborare le pagine dinamiche a software esterni, detti application server.
Di conseguenza, a causa dei diversi fattori esterni in gioco, spesso si rivela particolarmente difficile valutare come si comporta un webserver con questo tipo di parametri.

Quindi, in definitiva, i webserver event-driven sono in generale decisamente efficaci per quanto riguarda la rapidità di esecuzione di pagine web statiche, ma, se per altri motivi il software scelto si basa sulla gestione dei processi in serie, allora è possibile aumentare le prestazioni senza compromettere tutto il comparto software utilizzato fino a quel momento, raggiungendo così un buon compromesso tra velocità e compatibilità.

Compatibilità

Un altro parametro molto importante nella scelta del webserver è infatti proprio la compatibilità. Poichè non esiste un unico software in grado di soddisfare tutte le esigenze di un progetto potenzialmente molto vasto, è necessario scegliere accuratamente tutte le parti in gioco e i componenti software in modo tale che siano perfettamente integrati nel loro funzionamento quotidiano.

Alcuni esempi popolari di perfetta integrazione tra software per hosting sono i <i>web service stack</i>, gruppi di sottosistemi software che sono ampiamente utilizzati in modo affiancato poichè hanno dato prova di essere particolarmente efficaci e ben integrati. Un esempio già citato é appunto il full stack Javascript, particolarmente apprezzato per l’efficacia nella gestione di web application. Tuttavia i web service stack solitamente comprendono, oltre al webserver, un sistema operativo, che può essere Linux, Windows o MacOS, almeno un database, come MySQL o PostgreSQL, per la gestione dei dati salvati in memoria e un linguaggio script per l’esecuzione dei contenuti dinamici presenti sulle pagine web, come ad esempio PHP, Perl o Python.
Per citarne alcuni: GLASS e LAMP, come detto, fanno uso di Apache tra gli altri, LNMP si appoggia invece su NGINX.

Una configurazione efficace di webserver invece potrebbe essere formata da Litespeed ed Apache, vista l’estrema facilità con cui Litespeed è in grado di gestire le configurazioni in stile Apache. In questo modo una particolare applicazione può beneficiare dei punti di forza di entrambi, senza sacrificare le prestazioni grazie all’architettura event-driven di Litespeed e alla gestione avanza delle cache.

Flessibilità

Ogni webserver analizzato fin ora potrebbe essere considerato più o meno flessibile, in base alle necessità del progetto, ma la verità è che ogni software ha accesso a metodi diversi per consentire all’utente di adattarlo alle proprie esigenze. Un webserver come Apache può contare su numerosi moduli di terze parti, appositamente sviluppati per poter supportare virtualmente qualsiasi funzionalità presente nei software dei competitor, seppur con qualche limitazione nelle prestazioni. Al contrario NGINX è in grado di svolgere diversi ruoli all’interno di un progetto web, ma spesso diverse funzioni devono essere delegate ad altri software che necessitano di una installazione completamente nuova, rendendo di fatto tutto il processo piuttosto complesso. Varnish invece può contare su un linguaggio di programmazione completo che permette di configurare estensivamente qualisasi peculiarità, in modo da soddisfare virtualmente qualsiasi esigenza. Litespeed, infine, ha dalla sua parte il vantaggio di supportare molti utilizzi nativamente, di conseguenza può essere adattato a diverse applicazioni web mantenendo un livello di efficienza costante.

Sicurezza

Purtroppo la sicurezza è un parametro tanto importante quanto difficilmente attestabile. Infatti, benchè tutti i webserver siano virtualmente sicuri, privi di bug e costantemente aggiornati per evitare che qualche hacker penetri nelle difese del software, non è mai possibile garantire la sicurezza in modo totale. Per questo è sempre necessario prestare molta attenzione nella configurazione di un server e consultare degli esperti in materia. Con i giusti accorgimenti le diverse funzionalità presenti nei software saranno in grado di prevenire furti di dati dal database del server, e si potranno dormire sonni tranquilli.

Altri webserver

Ci sono altri webserver, che non sono stati elencati in questo articolo, che possono tornare utili per diversi scopi.

Ecco una piccola lista di webserver alternativi

    • Apache Tomcat
    • IIS Windows Server
    • Jigsaw
    • Klone
    • Abyss web server
    • Oracle Web Tier
    • X5 web server
    • Zeus web server
    • Caddy Web Server
    • OpenLiteSpeed Web Server (versione OpenSource di Litespeed)
    • Hiawatha Web Server