Introduzione
A web server’s primary role is to serve web pages for a website. A web page can be rendered from a single HTML file, or a complex assortment of resources fitted together. If you want to host your web application on the internet, in many cases you will need a web server.
Uno dei casi d’uso più comuni per i server web è servire file necessari per il rendering di un sito web in un browser. Quando visiti http://www.digitalocean.com
, inizi inserendo un URL che avvia una richiesta su Internet. Questa richiesta passa attraverso più livelli, uno o più dei quali sarà un server web. Questo server web genera una risposta alla tua richiesta, che in questo caso è il sito web di DigitalOcean, specificamente la homepage. Idealmente, questo avviene rapidamente e con disponibilità 24 ore su 24, 7 giorni su 7.
Anche se ogni 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 molti risorse. I server web agiscono come intermediari tra il backend e il frontend, servendo risorse come file HTML e CSS ai dati JSON, tutti generati dinamicamente al volo o serviti staticamente. Se intendi lavorare con siti web o app online in qualsiasi capacità, è estremamente utile familiarizzare con le basi di cosa sia un server web e come funziona.
Anche se il termine “server web” può riferirsi sia al software stesso che all’hardware su cui esiste, questo articolo si riferisce specificamente al software del server web. Per ulteriori dettagli su questa differenza, consulta la nostra introduzione ai server cloud.
A web server handles requests on the internet through HTTP and HTTPS protocol, and is also called an HTTP server. A web server is distinct from other types of servers in that it specializes in handling these HTTP and HTTPS requests, differentiating itself from application servers (e.g. Gunicorn) and servers for other protocols (i.e. WSGI). These other servers work as intermediaries for backend programming languages through external libraries, which is a different level of abstraction than web servers.
Ecco alcuni compiti comuni gestiti dai server web:
- Serve file HTML, CSS e JavaScript.
- Serve immagini e video.
- Gestisce i messaggi di errore HTTP.
- Gestisce le richieste degli utenti, spesso in modo concorrente.
- Indirizza il matching e il rewriting degli URL.
- Elabora e serve contenuti dinamici.
- Comprime i contenuti per un utilizzo dati e una velocità ottimizzati.
- Abilita la memorizzazione nella cache del browser per i tuoi contenuti statici.
In termini pratici, ecco alcuni progetti personali che coinvolgerebbero un server web:
- Vuoi creare un sito web.
- Vuoi creare un’app che si connette a Internet.
Questa lista non è esaustiva e un server web non è strettamente limitato nei tipi di dati che può servire a un utente finale. Ad esempio, un server web che gestisce richieste di API web spesso risponde con dati in un formato come JSON.
Obiettivi di un Server Web
I server web soddisfano un pubblico con aspettative di velocità, disponibilità, affidabilità e altro ancora. Hanno lo scopo comune di fornire contenuti su Internet e, per essere considerata una soluzione server web valida, devono essere considerati i seguenti aspetti:
- Uptime: Questo si riferisce al tempo in cui un server web è online e operativo. I siti web devono essere online in ogni momento per servire gli utenti, quindi un uptime elevato è l’obiettivo. Ciò si traduce anche in stabilità e prevedibilità. Quando un utente inserisce un URL o fa clic su un link per accedere al tuo sito web, la pagina attesa dovrebbe caricarsi ogni volta e in qualsiasi momento. Le uniche eccezioni dovrebbero essere fermate pianificate per gli aggiornamenti o la manutenzione. Un server web che è instabile o si blocca casualmente influisce negativamente sull’esperienza degli utenti.
- Velocità: Le tue pagine web dovrebbero caricarsi il più velocemente possibile. Gli utenti vogliono che la loro richiesta venga soddisfatta immediatamente, altrimenti rischi di perderli. Su una pagina web che carica lentamente, anche se l’utente si siede durante il primo caricamento, ogni successivo caricamento lungo diminuirà esponenzialmente la loro volontà di rimanere o di visitare di nuovo il sito.
- Concorrenza: Questo si riferisce alla gestione di molte richieste che arrivano contemporaneamente. Avere troppe persone che cercano di visitare il tuo sito web contemporaneamente sembra una buona cosa, ma diventa un vero problema quando i tempi di caricamento rallentano a un punto morto e l’intero server si blocca. Il tuo server fisico o virtuale ha solo risorse limitate come RAM e potenza di calcolo della CPU, e i server web devono utilizzare efficientemente queste risorse.
- Scalabilità: La scalabilità si riferisce sia al rendere più potenti i tuoi server esistenti attraverso la scalabilità verticale, sia all’aggiunta di più server alla tua configurazione attraverso la scalabilità orizzontale. Man mano che il tuo pubblico cresce, potresti raggiungere un punto in cui hai bisogno di più di uno o due piccoli server web.
- Semplicità di configurazione: Avviare un progetto rapidamente è fondamentale per l’iterazione del tuo progetto. Un processo di installazione diretto e ripetibile è importante per il primo server web che imposti, e per i numerosi server web successivi quando aumenti la scala.
- Documentazione: I server web sono complessi. Le configurazioni più comuni ti faranno partire rapidamente, ma le tue esigenze cresceranno nel tempo. Molte volte avrai bisogno di funzionalità che non sono utilizzate comunemente. 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 proprio progetto, non dovresti impegnare il tuo progetto nel loro. Questo include sia i piani per il supporto a lungo termine del loro software, sia il supporto immediato a breve termine che forniscono sotto forma di correzioni di bug e patch.
- Supporto della comunità: Un team di sviluppo centrale si occuperà della maggior parte del lavoro pesante, ma una comunità vivace contribuisce a colmare le lacune. Con i progetti open source, ciò può significare contributi effettivi alla base di codice, ma una comunità solida risponderà anche alle tue domande e ti aiuterà con i tuoi problemi specifici.
Mentre i server web possono offrire diverse soluzioni, le soluzioni che offrono derivano dai tentativi di affrontare gli stessi problemi. Questi problemi stessi evolvono nel tempo insieme alle esigenze e alle aspettative dell’utente finale, rendendo questa una lista vivente e sempre in evoluzione.
Selezione di una soluzione server web
I server web open source più popolari al momento sono Apache e Nginx.
Apache è arrivato per primo e è stato sviluppato in un periodo in cui era comune che più siti web con i propri file di configurazione individuali esistessero su un singolo server web. Nginx è arrivato dopo Apache, in un periodo in cui le esigenze si sono spostate dal servire più siti web da un singolo server, e invece verso il servizio di un singolo sito web da un server in modo estremamente efficiente sotto carico.
Anche se i server web condividono gli stessi obiettivi e problemi, l’interpretazione e l’implementazione di ciascuna soluzione saranno diverse. Le risposte esatte a questi problemi plasmano l’identità di qualsiasi soluzione server web. Nginx e Apache sono evidenziati qui per la loro ubiquità, ma qualsiasi soluzione server web sarà opinabile. Quando si seleziona un server web, è importante tenere presente le proprie esigenze per il proprio progetto specifico. In questo modo, anche se il panorama delle offerte di server web cambia, il proprio metodo di valutazione rimane ancorato ai propri requisiti.
Ecco alcuni punti chiave differenzianti su come i server web tentano di raggiungere gli obiettivi di un server web:
Struttura dei file di configurazione
I server web memorizzano le loro impostazioni nei file di configurazione. Puoi personalizzare i tuoi server web modificando questi file. La memorizzazione e l’organizzazione dei file di configurazione è una questione strutturale opinabile che divide i prodotti dei server web.
La divisione principale è tra centralizzazione e decentralizzazione. I file di configurazione decentralizzati consentono un 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 unico server, ma piuttosto si concentrano sul servire efficientemente un singolo sito web. Queste configurazioni si basano sulla corrispondenza dei modelli URI, che è la corrispondenza degli URL con i nomi dei file e altri identificatori univoci, anziché basarsi sulla corrispondenza con la struttura delle directory di un server web.
I file .htaccess
di Apache facilitano una configurazione decentralizzata come funzionalità, e ogni decisione progettuale deriva da questo focus sul filesystem con un controllo granulare. Nginx non ha lo stesso focus sul filesystem e si concentra sulla corrispondenza dei modelli URI e su una configurazione centralizzata.
Gestione della concorrenza
I server fisici e virtuali su cui esegui server web hanno risorse limitate come RAM e CPU. Il modo in cui il tuo server web gestisce fondamentalmente le sue richieste avrà il maggior impatto sull’uso efficiente delle 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 simultaneamente in modo efficiente è legata a decisioni di progettazione fondamentali.
Apache gestisce le richieste generando processi, il che consuma risorse a un tasso che può diventare un problema sotto carico. Il sistema di gestione event-driven di Nginx utilizza meno risorse e può essere più performante sotto carico.
Servire Contenuti Statici
Oltre alle pagine web, i server web ricevono richieste per altre risorse come immagini, video, file CSS e file JavaScript. Poiché questi elementi sono sempre gli stessi indipendentemente da chi li richiede, questo tipo di contenuto viene definito statico. Molte volte una pagina web stessa è solo un file HTML che non viene personalizzato per la persona che lo richiede, ed è anche trattata come contenuto statico. I server web possono anche comprimere questo contenuto statico per tempi di caricamento migliori.
Nginx eccelle nel servire contenuti statici grazie alla sua gestione delle richieste event-driven. Apache può anche servire contenuti statici, ma nella maggior parte delle configurazioni, non alla stessa velocità e efficienza sotto carico rispetto a Nginx.
Servizio di Contenuti Dinamici
Quando il contenuto viene modificato, elaborato e personalizzato a seconda di chi lo richiede, viene definito dinamico. Ad esempio, dopo aver effettuato l’accesso a un sito web, spesso il sito popolerà dinamicamente il tuo nome utente nella barra di navigazione superiore. Il contenuto dinamico aggiunge ulteriore complessità perché obbliga il server web a gestire molte richieste in modo univoco al momento in cui le riceve. Il contenuto personalizzato per ogni richiesta non può essere servito a tutti e non può essere memorizzato nella cache in modo universale.
Elaborare il contenuto dinamico internamente rimuove uno strato aggiuntivo di astrazione che normalmente richiederebbe di passare la richiesta a una libreria esterna. Apache implementa nativamente l’elaborazione del contenuto dinamico, con stack di soluzioni popolari come LAMP (Linux, Apache, MySQL, PHP). Nginx è più agnostico dal punto di vista del linguaggio ma richiede librerie esterne come PHP-FPM per fungere da soluzione simile per casi d’uso come lo stack LAMP.
Capacità di Proxy Inverso
A reverse proxy sits in front of a traditional web server, becoming an intermediary server that routes HTTP request traffic to web servers behind it. A reverse proxy becomes the gateway that directs traffic between web servers and the internet at large, and often is the layer that directly interfaces with a firewall. While most web servers have reverse proxy capability, Nginx was built and optimized from the ground up to be a robust reverse proxy server.
L’importanza di Nginx nell’uso del mondo reale dipende fortemente dalle sue funzionalità di reverse proxy ed efficienza. Molti setup 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 consente anche di accoppiarlo con Apache in alcuni setup, posizionandolo come reverse proxy di fronte a un tradizionale server web Apache.
Ecosistema di supporto
Nginx e Apache godono entrambi di un forte supporto dai rispettivi team di sviluppo e dalla comunità. Essendo i server web open source più popolari, le risorse di apprendimento sono abbondanti. Apache è supportato dalla Apache, un’organizzazione non profit, e sarà sempre gratuito. Il core di Nginx è open source, ma le funzionalità desiderabili sono bloccate dietro il loro prodotto Nginx Plus con funzionalità come controlli di salute upstream, persistenza delle sessioni e monitoraggio avanzato.
Alternative al tradizionale server web
Se desideri un server pronto a rispondere in qualsiasi momento a una richiesta HTTP in arrivo, allora un server web è la soluzione migliore per questo compito. Man mano che ti allontani dall’attenzione verso il servizio delle richieste HTTP, i server web diventeranno meno ideali. Questo è particolarmente vero per le funzionalità ausiliarie che i server web forniscono. Ad esempio, funzionalità come la memorizzazione nella cache possono essere gestite in modo più efficiente a livelli di reverse proxy o CDN, a seconda della configurazione.
Inoltre, dato che gli sviluppatori hanno spostato le loro priorità nell’assegnare risorse di sviluppo alla gestione dei server web, sono emerse soluzioni come serverless, headless CMS e Jamstack in risposta. Queste soluzioni non richiedono un server web auto-ospitato, ma astraggono il livello del server web verso servizi esterni. Per gli sviluppatori che non necessitano di un controllo dettagliato o avanzato del livello del server web, il tempo di sviluppo può essere concentrato altrove. Per ulteriori informazioni, consulta questo articolo su Jamstack con headless CMS o implementazione di Jamstack full stack con DigitalOcean’s App Platform.
Conclusione
In questo articolo, hai esplorato una guida di base su cosa sono i server web, come vengono utilizzati e i problemi che cercano di risolvere. Dotato di questa conoscenza, ti sei immer(o)so nel panorama attuale delle soluzioni server web e hai applicato la tua conoscenza 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 di corsi sulla cloud relativa ai server web.
Risorse aggiuntive
Tutorial:
- Come Installare Apache: Istruzioni passo-passo per configurare il tuo primo server Apache. Questa soluzione eccelle con la 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 la configurazione centralizzata, il servizio di asset statici, l’agire come un proxy inverso e la gestione del traffico ad alta concorrenza.
- Apache vs Nginx: Considerazioni Pratiche: Uno sguardo più approfondito ai due principali attori nel panorama delle soluzioni server web.
Prodotti DigitalOcean:
- DigitalOcean Droplets: Server virtuali privati per testare e distribuire server web.
- Funzioni DigitalOcean: Soluzione serverless che può essere un’alternativa ai server virtuali privati. Salta la manutenzione dei server, concentrandoti sul codice della tua applicazione.
Source:
https://www.digitalocean.com/community/conceptual_articles/introduction-to-web-servers