Introduzione
Il ruolo principale di un server web è quello di servire pagine web per un sito web. Una pagina web può essere resa da un singolo file HTML o da una complessa raccolta di risorse montate insieme. Se desideri ospitare la tua applicazione web su Internet, in molti casi avrai bisogno di un server web.
Uno dei casi d’uso più comuni per i server web è quello di servire i file necessari per la visualizzazione di un sito web in un browser. Quando visiti http://www.digitalocean.com
, inizi inserendo un URL che avvia una richiesta attraverso Internet. Questa richiesta passa attraverso più livelli, uno o più dei quali saranno un server web. Questo server web genera una risposta alla tua richiesta, che in questo caso è il sito web di DigitalOcean, più precisamente la homepage. Idealmente, questo avviene rapidamente e con una disponibilità 24/7.
Anche se qualsiasi visitatore della homepage di DigitalOcean la esperirà come una singola pagina web, in realtà la maggior parte delle pagine web moderne oggi sono una combinazione di molte risorse. I server web agiscono come intermediari tra il backend e il frontend, servendo risorse come file HTML e CSS a dati JSON, tutti generati dinamicamente al volo o serviti staticamente. Se intendi lavorare con siti web o applicazioni online in qualsiasi capacità, è estremamente utile familiarizzare te stesso con i fondamenti di cosa sia un server web e come funziona.
Il termine “web server” può riferirsi sia al software stesso che all’hardware su cui esiste, ma questo articolo si riferisce specificamente al software del web server. Per ulteriori dettagli su questa differenza, consulta la nostra introduzione ai server cloud.
Casi d’Uso Comuni
Un web server gestisce le richieste su Internet tramite protocolli HTTP e HTTPS, e viene anche chiamato server HTTP. Un web server è distinto da altri tipi di server poiché si specializza nella gestione di queste richieste HTTP e HTTPS, differenziandosi dagli server di applicazioni (ad esempio, Gunicorn) e dagli server per altri protocolli (cioè, WSGI). Questi altri server lavorano come intermediari per linguaggi di programmazione backend tramite librerie esterne, il che è un livello di astrazione diverso rispetto ai web server.
Ecco alcune attività comuni gestite dai web server:
- Serve file HTML, CSS e JavaScript.
- Serve immagini e video.
- Gestisce i messaggi di errore HTTP.
- Gestisce le richieste degli utenti, spesso contemporaneamente.
- Dirige la corrispondenza e la riscrittura degli URL.
- Elabora e serve contenuti dinamici.
- Comprime i contenuti per ottimizzare l’uso dei dati e la velocità.
- Abilita la cache del browser per i tuoi contenuti statici.
In pratica, ecco alcuni progetti personali che coinvolgono un server web:
- Vuoi creare un sito web.
- Vuoi creare un’app che si connette a Internet.
Questa lista non è affatto completa, e un server web non è strettamente limitato nei tipi di dati che può servire a un utente finale. Ad esempio, un server web che serve richieste API web risponde spesso con dati in un formato come JSON.
Obiettivi di un Server Web
I server web soddisfano un pubblico che si aspetta velocità, disponibilità, affidabilità e altro. Hanno un scopo condiviso, ovvero servire contenuti su Internet, e per essere considerato una soluzione viable per server web, devono essere considerati i seguenti aspetti:
- Uptime: Si riferisce al tempo in cui un server web è online e operativo. I siti web devono essere online sempre per servire gli utenti, quindi un alto uptime è l’obiettivo. Questo si traduce anche in stabilità e prevedibilità. Quando un utente inserisce un URL o clicca su un link per il tuo sito web, la pagina attesa dovrebbe caricarsi ogni volta e in qualsiasi momento. Le uniche eccezioni dovrebbero essere tempi di inattività pianificati per aggiornamenti o manutenzione. Un server web che è buggy o si blocca a caso influisce negativamente sull’esperienza degli utenti.
- Velocità: Le tue pagine web dovrebbero caricarsi il più rapidamente possibile. Gli utenti vogliono che le loro richieste siano soddisfatte immediatamente, altrimenti rischi di perderli. Su una pagina web con caricamento lento, anche se l’utente attende il primo caricamento, ogni successivo lungo caricamento ridurrà esponenzialmente la loro volontà di rimanere o di visitare di nuovo.
- Concorrenza: Questo si riferisce alla gestione di più richieste che arrivano contemporaneamente. Avere troppa gente che cerca di visitare il tuo sito web allo stesso tempo sembra una cosa buona, ma diventa un vero problema quando i tempi di caricamento si fanno più lenti e l’intero server va in crash. Il tuo server fisico o virtuale ha risorse limitate come la RAM e la potenza di calcolo della CPU, e i server web devono utilizzare queste risorse in modo efficiente.
- Scalabilità: La scalabilità si riferisce o all’aumento della potenza dei tuoi server esistenti attraverso la scalabilità verticale, o all’aggiunta di più server alla tua configurazione attraverso la scalabilità orizzontale. Man mano che cresci la tua audience, potresti raggiungere un punto in cui hai bisogno di più di uno o due piccoli server web.
- Facilità di setup: Riuscire a far partire un progetto rapidamente è la chiave per l’iterazione del tuo progetto. Un processo di installazione semplice e ripetibile è importante per il primo server web che configuri, e per i molti server web successivi quando escali.
- Documentazione: I server web sono complessi. Le configurazioni più comuni ti fanno iniziare rapidamente, ma le tue esigenze cresceranno nel tempo. Spesso avrai bisogno di funzionalità che non sono così comunemente utilizzate. Quando arriva quel momento, una buona documentazione è essenziale per creare soluzioni personalizzate per le tue esigenze.
- Supporto degli sviluppatori: Se gli sviluppatori principali non sono impegnati nel loro progetto, non dovresti impegnare il tuo progetto nel loro. Questo include sia piani di supporto a lungo termine per il loro software, sia supporto a breve termine immediato che forniscono sotto forma di correzioni di bug e patch.
- Supporto della comunità: Un team di sviluppo principale gestirà la maggior parte del lavoro pesante, ma una comunità fiorente contribuisce a riempire i vuoti. Con i progetti open source, questo può significare contributi al codice stesso, ma una comunità forte risponderà anche alle tue domande e ti aiuterà con i tuoi problemi specifici.
Sebbene i server web possano offrire soluzioni diverse, le soluzioni che offrono derivano da tentativi di risolvere questi stessi problemi. Questi problemi stessi evolvono nel tempo insieme alle esigenze e aspettative dell’utente finale, rendendo questa una lista vivente e in continua evoluzione.
Selezionare una Soluzione per Server Web
I server web open source più popolari al momento sono Apache e Nginx.
Apache è arrivato per primo, ed è stato costruito in un periodo in cui era comune per più siti web con i loro file di configurazione individuali esistere su un singolo server web. Nginx è arrivato dopo Apache, in un periodo in cui le esigenze si sono spostate dall’offrire più siti web da un server, verso l’offrire un sito web da un server in modo estremamente efficiente sotto carico.
I server web condividono gli stessi obiettivi e problemi, ma l’interpretazione e l’implementazione di ciascuna soluzione saranno diverse. Le risposte esatte a questi problemi determinano l’identità di qualsiasi soluzione di server web data. Nginx e Apache sono evidenziati qui a causa della loro ubiquità, ma ogni soluzione di server web sarà opinabile. Quando si seleziona un server web, è importante tenere a mente le proprie esigenze per il progetto specifico. In questo modo, anche se il panorama delle offerte di server web cambia, il metodo di valutazione rimane basato sulle proprie esigenze.
Ecco alcuni differenziali chiave su come i server web cercano di raggiungere gli obiettivi di un server web:
Struttura dei File di Configurazione
I server web memorizzano le loro impostazioni nei file di configurazione. È possibile personalizzare i propri server web modificando questi file. La memorizzazione e l’organizzazione dei file di configurazione sono un problema strutturale e opinabile che divide i prodotti di server web.
Il principale divisorio è tra centralizzazione e decentralizzazione. I file di configurazione decentralizzati permettono un livello di controllo granulare a livello di filesystem, che deriva dalla necessità di ospitare più siti web su un unico server. Le configurazioni centralizzate non si concentrano sull’hosting di più siti web su un server, ma si concentrano invece sull’efficace servizio di un singolo sito web. Queste configurazioni si basano sulla corrispondenza dei pattern URI, che è la corrispondenza degli URL con nomi dei file e altri identificatori unici, invece di dipendere dalla corrispondenza con la struttura delle directory di un server web.
I file .htaccess
di Apache facilitano una configurazione decentralizzata come funzionalità, e ogni decisione di design deriva da questo focus sul filesystem con un livello di controllo granulare. Nginx non ha lo stesso focus sul filesystem e si concentra sulla corrispondenza dei pattern URI e una configurazione centralizzata.
Gestione della Concorrenza
Il server fisici e virtuali su cui giri i server web hanno risorse limitate come la RAM e la CPU. Il modo in cui il tuo server web gestisce fondamentalmente le sue richieste avrà l’impatto più grande sull’uso efficiente delle tue risorse. Una singola richiesta può generare un intero processo per richiesta, oppure può essere gestita su base event-driven. La capacità del tuo server web di gestire più richieste simultanee in modo efficiente è legata a decisioni di design fondamentali.
Apache gestisce le richieste generando processi, il che consuma risorse a un ritmo che può diventare un problema sotto carico. Il sistema di gestione basato su eventi di Nginx utilizza meno risorse e può essere più performante sotto carico.
Servizio di Contenuti Statici
Oltre alle pagine web, i server web ricevono richieste per altre risorse come immagini, video, file CSS e file JavaScript. Dato che questi elementi sono sempre gli stessi indipendentemente da chi li richiede, questo tipo di contenuto è definito statico. Spesso, una pagina web stessa è solo un file HTML che non è personalizzato per la persona che lo richiede e viene trattato anche come contenuto statico. I server web possono anche comprimere questo contenuto statico per migliori tempi di caricamento.
Nginx eccelle nel servire contenuti statici grazie alla sua gestione delle richieste basata su eventi. Apache può anche servire contenuti statici, ma nella maggior parte delle configurazioni, non alla stessa velocità ed efficienza sotto carico rispetto a Nginx.
Servizio di Contenuti Dinamici
Quando il contenuto viene modificato, elaborato e personalizzato in base a chi lo sta richiedendo, il contenuto viene definito dinamico. Per esempio, dopo aver effettuato l’accesso a un sito web, spesso il sito web popolerà dinamicamente il tuo nome utente nella barra di navigazione in alto. Il contenuto dinamico aggiunge una complessità aggiuntiva perché costringe il server web a gestire molte richieste in modo unico al momento della ricezione. Contenuto personalizzato per richiesta non può essere servito a tutti e non può essere memorizzato nella cache in modo universale.
Elaborare il contenuto dinamico internamente rimuove un livello附加 di astrazione che normalmente richiederebbe trasferire la richiesta a una libreria esterna. Apache implementa nativamente l’elaborazione del contenuto dinamico, con pile di soluzioni popolari come LAMP (Linux, Apache, MySQL, PHP). Nginx è più agnostico rispetto ai linguaggi ma richiede librerie esterne come PHP-FPM per agire come una soluzione simile per use case come la pila LAMP.
Capacità di Reverse Proxy
Un reverse proxy si situa davanti a un server web tradizionale, diventando un server intermedio che instrada il traffico delle richieste HTTP ai server web posteriori. Un reverse proxy diventa la porta di accesso che indirizza il traffico tra i server web e l’intero Internet, e spesso è il livello che interagisce direttamente con un firewall. Sebbene la maggior parte dei server web abbiano la capacità di reverse proxy, Nginx è stato costruito e ottimizzato fin dall’inizio per essere un robusto server di reverse proxy.
L’importanza di Nginx nell’uso reale dipende fortemente dalle sue funzionalità di reverse proxy e dalla sua efficienza. Molte configurazioni di server posizionano più server web tradizionali dietro un reverse proxy Nginx, utilizzando Nginx per determinare a quale server web inviare la richiesta in base al carico o alla configurazione delle regole. Questo ruolo intermedio permette persino di associarlo ad Apache in alcune configurazioni, stando come reverse proxy davanti a un tradizionale server web Apache.
Ecosistema di supporto
Nginx e Apache vantano entrambi un forte supporto dai loro rispettivi team di sviluppo e comunità. Essendo i server web open source più popolari, le risorse di apprendimento sono abbondanti. Apache è supportato dall’Apache Software Foundation, un’organizzazione no profit, e sarà sempre gratuito. Il nucleo di Nginx è open source, ma le funzionalità desiderabili sono riservate al loro prodotto Nginx Plus, che offre caratteristiche come i controlli di salute degli upstream, la persistenza delle sessioni e il monitoraggio avanzato.
Alternative ai Server Web Tradizionali
Se si desidera un server pronto in ogni momento per rispondere a una richiesta HTTP in arrivo, allora un server web è l’ideale per questa task. Man mano che si allontana dalla gestione delle richieste HTTP, i server web diventano meno una soluzione ideale. Questo è particolarmente vero per le funzionalità ausiliarie che i server web forniscono. Ad esempio, funzionalità come la cache potrebbero essere gestite più efficientemente a livello di proxy inverso o CDN, a seconda della configurazione.
Inoltre, con il passare del tempo, gli sviluppatori hanno cambiato le loro priorità dedicando meno risorse allo sviluppo della gestione dei server web, e sono emersi soluzioni come serverless, CMS headless e Jamstack. Queste soluzioni non richiedono un server web self-hosted, ma astraggono il livello del server web a servizi esterni. Per gli sviluppatori che non necessitano di un controllo granulare o avanzato del livello del server web, il tempo di sviluppo può essere dedicato altrove. Per saperne di più, consulta questo articolo su Jamstack con CMS headless o implementare Jamstack full stack con la piattaforma App di DigitalOcean.
Conclusione
In questo articolo, hai attraversato un’introduzione di base sui cos’sono i server web, come vengono utilizzati e quali problemi cercano di risolvere. Equipaggiato con queste conoscenze, sei entrato nell’attuale panorama delle soluzioni per server web, applicando le tue conoscenze per trovare la soluzione che si adatta specificamente alle tue esigenze. Per saperne di più su come configurare e utilizzare un server web, consulta il resto della nostra serie Cloud Curriculum sui server web.
Risorse Aggiuntive
Tutorial:
- Come Installare Apache: Istruzioni passo-passo per configurare il tuo primo server Apache. Questa soluzione eccelle con una configurazione decentralizzata per un controllo granulare e la gestione interna delle pagine web dinamiche con collegamenti ai linguaggi di programmazione popolari come PHP.
- Come Installare Nginx: Istruzioni passo-passo per configurare il tuo primo server Nginx. Questa soluzione eccelle con una configurazione centralizzata, la gestione di asset statici, il funzionamento come proxy inverso e la gestione di un traffico ad alta concorrenza.
- Apache vs Nginx: Considerazioni Pratiche: Un’analisi più approfondita dei due principali attori nel panorama delle soluzioni per server web.
Prodotti DigitalOcean:
- Droplet DigitalOcean: Server privati virtuali per testare e distribuire server web.
- Funzioni DigitalOcean: Soluzione serverless che può essere un’alternativa ai server privati virtuali. Ignora la manutenzione dei server, concentrati sul codice della tua applicazione.
Source:
https://www.digitalocean.com/community/conceptual_articles/web-servers-introduction