Introduzione ai server Web

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 è quello di servire file necessari per la resa 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, ciò avviene rapidamente e con disponibilità 24/7.

Anche se qualsiasi visitatore della homepage di DigitalOcean la percepisce come una singola pagina web, nella realtà la maggior parte delle pagine web moderne oggi sono una combinazione di molti elementi. I server web agiscono come intermediari tra il backend e il frontend, servendo risorse come file HTML e CSS ai dati JSON, il tutto generato dinamicamente al volo o servito staticamente. Se hai intenzione di 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.

Sebbene il termine “server web” possa riferirsi sia al software stesso che all’hardware su cui esso è installato, questo articolo si riferisce specificamente al software del server web. Per ulteriori dettagli su questa differenza, consulta la nostra introduzione ai server cloud.

Casi d’Uso Comuni

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 la messaggistica 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 uso ottimizzato dei dati e per la velocità.
  • 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 è affatto 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 le richieste di API web spesso risponde con dati in un formato come JSON.

Obiettivi di un Server Web

I server web si rivolgono a un pubblico con aspettative di velocità, disponibilità, affidabilità e altro ancora. Hanno uno scopo comune di servire contenuti su Internet e, per essere considerata una soluzione di server web valida, devono essere considerati i seguenti aspetti:

  • Tempo di attività: Questo si riferisce al tempo in cui un server web è online e operativo. I siti web devono essere online tutto il tempo per servire gli utenti, quindi un alto tempo di attività è l’obiettivo. Questo si traduce anche in stabilità e prevedibilità. Quando un utente inserisce un URL o fa clic su un link verso il tuo sito web, la pagina prevista 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 è 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 a caricamento lento, anche se l’utente sopporta il primo caricamento, ogni caricamento successivo lungo diminuirà esponenzialmente la loro volontà di rimanere o visitare nuovamente.
  • Concorrenza: Questo si riferisce alla gestione di molteplici 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 fino a fermarsi del tutto e l’intero server si blocca. Il tuo server fisico o virtuale ha solo risorse limitate come la RAM e la potenza di calcolo della CPU, e i server web devono utilizzare efficientemente queste risorse.
  • Scalabilità: La scalabilità si riferisce sia a rendere i tuoi server esistenti più potenti attraverso la scalabilità verticale, sia ad aggiungere più server alla tua configurazione attraverso la scalabilità orizzontale. Man mano che aumenti il tuo pubblico, potresti raggiungere un punto in cui hai bisogno di più di uno o due piccoli server web.
  • Facilità di configurazione: Riuscire a far partire un progetto rapidamente è fondamentale per l’iterazione del tuo progetto. Un processo di installazione semplice e ripetibile è importante per il primo server web che configuri e per i server web multipli successivi quando aumenti la scala.
  • Documentazione: I server web sono complessi. Le configurazioni più comuni ti permetteranno di iniziare rapidamente, ma le tue esigenze cresceranno nel tempo. Molte volte avrai bisogno di funzionalità che non vengono 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 piani di supporto a lungo termine per il 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 principale si occuperà della maggior parte del lavoro pesante, ma una comunità florido contribuisce a colmare le lacune. Con i progetti open source, questo può significare contributi effettivi alla base di codice, ma una comunità forte risponderà anche alle tue domande e ti aiuterà con i tuoi problemi specifici.

Mentre i server web possono offrire soluzioni diverse, le soluzioni che offrono derivano dai tentativi di affrontare gli stessi problemi. Questi problemi stessi si evolvono nel tempo insieme alle esigenze e alle aspettative dell’utente finale, rendendo questa una lista in continua evoluzione e sempre viva.

Selezione di una soluzione per server web

I server web open source più popolari al momento sono Apache e Nginx.

Apache è arrivato prima 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 momento in cui le esigenze si sono spostate dalla gestione di più siti web da un unico server, verso la gestione 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 di server web. Nginx e Apache sono evidenziati qui per la loro ubiquità, ma qualsiasi soluzione per server web sarà opinabile. Quando si seleziona un server web, è importante tenere presenti le proprie esigenze specifiche per il proprio progetto. In questo modo, anche se il panorama delle offerte di server web cambia, il proprio metodo di valutazione resta ancorato ai propri requisiti.

Ecco alcuni elementi differenzianti chiave 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 principale divisione è 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 sull’erogazione efficiente di un singolo sito web. Queste configurazioni si basano sulla corrispondenza dei pattern URI, che è la corrispondenza degli URL con i nomi dei file e altri identificatori univoci, invece di basarsi sulla corrispondenza con la struttura delle directory di un server web.

I file .htaccess di Apache facilitano una configurazione decentralizzata come caratteristica, e ogni decisione progettuale fluisce da questo focus sul filesystem con un controllo granulare. Nginx non ha lo stesso focus sul filesystem e si concentra sulla corrispondenza dei pattern 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’utilizzo 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 efficientemente più richieste simultanee è legata a decisioni di progettazione 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 degli 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 altri contenuti come immagini, video, file CSS e file JavaScript. Poiché questi elementi sono sempre gli stessi indipendentemente da chi li richiede, questo tipo di contenuto è definito statico. Molte volte una pagina web stessa è solo un file HTML che non è personalizzato per la persona che lo richiede, ed è anch’esso considerato 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 in base a chi lo richiede, si parla di contenuto 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 in alto. Il contenuto dinamico aggiunge ulteriore complessità perché costringe il server web a gestire molte richieste in modo univoco al momento della ricezione. 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 di astrazione aggiuntivo che normalmente richiederebbe di passare la richiesta a una libreria esterna. Apache implementa nativamente l’elaborazione dei contenuti dinamici, 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 agire come una 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 pesantemente dalle sue funzionalità di reverse proxy e dall’efficienza. Molti setup server posizionano diversi 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 abbinarlo ad Apache in alcuni setup, posizionandolo come reverse proxy di fronte a un tradizionale server web Apache.

Ecosistema di supporto

Sia Nginx che Apache godono 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 dall’Apache Software Foundation, un’organizzazione non a scopo di lucro, e sarà sempre gratuito da utilizzare. Il core di Nginx è open source, ma le funzionalità desiderabili sono bloccate dietro il loro prodotto Nginx Plus con caratteristiche 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. Man mano che ti allontani dall’obiettivo di servire 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à nel dedicare risorse di sviluppo alla gestione dei server web, sono emerse soluzioni come serverless, CMS headless 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 granulare o avanzato del livello del server web, il tempo di sviluppo può essere focalizzato altrove. Per saperne di più, consulta questo articolo su Jamstack con CMS headless o implementazione di Jamstack full stack con DigitalOcean’s App Platform.

Conclusione

In questo articolo, hai attraversato 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 immerso nel panorama attuale delle soluzioni per 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, dai un’occhiata al resto della nostra serie di curriculum Cloud sui 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 di pagine web dinamiche con collegamenti a 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: Un’analisi più approfondita dei due principali attori nel panorama delle soluzioni per server web.

Prodotti DigitalOcean:

  • DigitalOcean Droplets: Server privati virtuali per testare e distribuire server web.
  • Funzioni DigitalOcean: Soluzione serverless che può essere un’alternativa ai server privati virtuali. Salta la manutenzione dei server, concentrandoti sul codice dell’applicazione.

Source:
https://www.digitalocean.com/community/conceptual-articles/introduction-to-web-servers