Virtual hosting
# Virtual hosting

L'Hosting virtuale è un metodo usato sui server web per ospitare il sito web per più di un nome di dominio sullo stesso server, talvolta sullo stesso indirizzo IP.

Vi sono diverse tecniche di virtual hosting, con diverse limitazioni.

## Limitazioni

Vi sono due fattori che influenzano le configurazioni di virtual hosting possibili:

* La versione di HTTP utilizzata (1.0, 1.1 o 2.0; ancora in fase di definizione la versione http 3.0).
* L'utilizzo di HTTPS o solo di HTTP.

## IP-based virtual hosting

Si assegnano più indirizzi IP ad un server. Questo può essere fatto associando diversi indirizzi IP ad una stessa interfaccia. A ciascun indirizzo IP è associato un nome DNS. Il server web valuta l'indirizzo IP destinazione su cui è stata ricevuta la connessione TCP (ovvero uno dei propri indirizzi), e di conseguenza sceglie quale contenuto servire.

Questa tecnica è compatibile con HTTP/1.0 e con HTTPS.

Lo svantaggio è che per ciascun sito è richiesto un indirizzo IP dedicato, e questo può essere costoso.

### Port-based virtual hosting

Questa tecnica è una variante della precedente, dove il server ascolta sullo stesso indirizzo IP ma su diverse porte TCP, e a ciascuna porta TCP è associato un sito (ed eventualmente il relativo certificato).

In questo modo si evita la necessità di un indirizzo IP per sito, ma si usano porte non standard, che possono essere bloccate da firewall o proxy, e si devono usare URL contenenti il numero di porta, come "http://portquiz.net:8011", più difficili da ricordare.

## Name-based virtual hosting

Questa tecnica richiede l'uso di HTTP/1.1, che prevede l'invio di un URL contenente il nome del sito richiesto nella richiesta HTTP.

Il server è configurato con un solo indirizzo IP, a cui sono associati i nomi DNS di tutti i siti ospitati. Quando il server riceve una richiesta HTTP, legge l'hostname richiesto e decide di conseguenza quale dominio servire.

Questo permette di utilizzare un solo indirizzo IP per molti siti utilizzando porte TCP standard e URL senza la specifica della porta.

Questa tecnica è comunemente usata da providers di spazio web per siti internet.

### Name-based virtual hosting con HTTPS

Un server HTTPS, quando riceve una connessione TCP, deve stabilire la sessione SSL, e per fare questo deve presentare il proprio certificato per provare al client la sua identità.

Se però si usa il name-based virtual hosting, ciascun sito ospitato avrà un proprio certificato, e il server che riceve una connessione TCP potrebbe non sapere ancora quale sito gli venga richiesto, e quindi quale certificato presentare. Il browser, non ricevendo il certificato corrispondente al sito che ha richiesto, mostrerebbe un errore. Per questo motivo, è stato introdotto il protocollo Server Name Indication (SNI) come estensione del Transport Layer Security (TLS) all'inizio della procedura di handshaking. In questo modo è ora possibile associare ad uno stesso indirizzo ip più siti in https.

