Name-based virtual host

Il named-based virtual host (host virtuale basato sul nome) è la tecnica più diffusa per avere più siti diversi su uno stesso server che ha un solo indirizzo IP.

Ogni server httpd ha la propria metodologia per definire gli host virtuali, la descrizione che segue non fa riferimento ad un software in particolare, ma spiega solamente il funzionamento del name-based virtual host (da qui in puoi chiamato semplicemente virtual host).

Un client (browser) che vuole scaricare una risorsa da un server con protocollo http apre una connessione sulla porta 80 del server e invia un comando di questo tipo

GET http://siamogeek.com HTTP/1.1

Il server risponderà inviando la risorsa (in questo caso la pagina principale di questo sito) sullo stesso canale.

Ma per fare in modo che sullo stesso server convivano i siti www.acme.com, www.esempio.com e www.siamogeek.com dobbiamo utilizzare un metodo per sapere cosa sta chiedendo il client e fornirgli, quindi, le pagine giuste.

Si parte, come sempre, dal DNS: dovremo fare in modo che gli host www.acme.com, www.esempio.com e www.siamogeek.com abbiano tutti il medesimo IP, ipotizziamo che sia 1.2.3.4

Definito l’IP nelle zone dei nomi a dominio, bisogna dire al server http di attivare il virtual host e dovremo definire per ogni host virtuale una directory da cui pescare i file da servire ai client.

Quindi avremo per www.acme.com la directory /web/acme.com, per www.esempio.com la directory /web/esempio.com e per www.siamogeek.com la directory /web/siamogeek.com

Fatto ciò il server sa di dover servire tre host virtuali, conosce i loro nomi e sa dove si trovano i file da passare ai client per ciascun sito.

Spostiamoci sul client e cerchiamo di aprire la pagina principale di Siamo Geek.

Il browser chiede al sistema operativo di risolvere il nome www.siamogeek.com e gli viene comunicato che ha come IP 1.2.3.4

Il browser apre una connessione TCP sulla porta 80 del server 1.2.3.4 e invia il comando

GET http://www.siamogeek.com/ HTTP/1.1

Il server analizza la richiesta e capisce che il client vuole un file del sito www.siamogeek.com, quindi cerca nella propria configurazione dove siano registrati i file di quel sito, prende il file richiesto e lo passa al client.

Nel caso in cui il client non specifichi il nome di un sito, il server prenderà il sito definito come default nella configurazione.

Questa è ovviamente una spiegazione generica, non ha la pretesa di voler sviscerare ogni aspetto del virtual hosting http ma potrebbe essere utile per chiarire come funziona una tecnologia che utilizziamo tutti i giorni.

È possibile, con alcune limitazioni, fare la medesima cosa anche con HTTPS utilizzando SNI.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

3 pensieri riguardo “Name-based virtual host”

  1. ..io mi ricordavo, da sniffate del traffico http, che funziona un pelino diversa la sintassi:

    GET /index.html HTTP/1.1
    Host: http://www.pippo.com

    e quindi che l’Host è specificato con un header della richiesta.

    Quello che dici tu sembra la sintassi dei proxy 😀

    comunque il senso del post rimane, sintassi a parte 🙂

Spazio per un commento