Unnikked - Esperienze personali in campo informatico

Guida ai Virtual Host di Apache

Con il termine Virtual Host ci riferiamo alla possibilità di ospitare più di un sito web sulla stessa macchina. I Virtual Host possono essere “basati su IP”, cioè ogni sito è associato ad un determinato indirizzo IP, o “basato su nome”, cioè ogni sito è associato ad un dominio web, i cui stessi puntano allo stesso indirizzo IP della macchina che li ospita. Il risultato finale della configurazione non viene mostrato all’utente finale.

I virtual host basati su IP usano l’indirizzo IP della connessione per determinale il corretto virtual host da servire. Pertanto bisogna avere indirizzi IP diversi per ogni host. Ciò significa che il server dovrebbe avere tante schede di rete, associate ad un specifico indirizzo IP, quanti sono gli i siti web da ospitare. Questa configurazione è più difficile da realizzare. Invece, con i virtual host basati su nome, il server si affida al client che comunica il nome dominio tramite la richiesta HTTP. Usando questa tecnica, diversi siti web possono condividere lo stesso indirizzo IP.

slider
images not found

La tecnica basata sui nomi degli host è di solito più semplice da realizzare, dal momento che bisogna solo configurare il server DNS per mappare ogni hostname al corretto indirizzo IP e successivamente configurare il server Apache per il riconoscimento dei diversi nomi.

Per usare un virtual hosting basato su nome, bisogna assegnare l’indirizzo IP (e possibilmente la porta) sul server che accetterà le richieste per l’host. Ciò viene fatto con la direttiva NameVirtualHost. Normalmente si può assegnare il simbolo * alla direttiva per indicare qualsiasi indirizzo IP del server. Se invece si ha la necessità di utilizzare diverse porte (e.s. uso di SSL) bisogna specificare una Porta all’argomento, come *:80. Bisogna notare che inserire un indirizzo IP nella direttiva NameVirtualHost, il server non si metterà in ascolto su tale automaticamente.

Il prossimo passo è quello di creare un blocco per ogni diverso host che si vuole servire. L’argomento della direttiva deve corrispondere ad un NameVirtualHost noto. (Nella maggior parte dei casi sarà “*:80“. All’interno di ogni blocco bisogna specificare la direttiva ServerName per specificare quale host è servito e la direttiva DocumentRoot per mostrare dove si trovano i file da essere mostrati.

Per esempio, supponiamo di voler ospitare un secondo sito su un server con dominio esempio.com. Ci basterà creare un file per il nostro virtual host nella cartella /etc/apache2/sites-available/

vim /etc/apache2/sites-avaiable/esempio

e scrivere le direttive dei virtual host

<VirtualHost *:80>
        ServerAdmin example@webmaster
        ServerName esempio.com
        ServerAlias www.esempio.com
        DocumentRoot /percorso/root/sitoweb
</VirtualHost>

Successivamente abilitiamo il virtual host appena creato con il comando

a2ensite esempio

e riavviamo apache

service apache2 restart

Se viene mostrato un messaggio del tipo

Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
può essere ignorato in quanto è un warning.

può essere semplicemente ignorato.

Aggiornamento 30/04/2014

Per far scomparire il warning fastidioso di apache bisogna aggiungere nel proprio file /etc/hosts un record relativo all’indirizzo IP del server e il dominio associato ad esso.

Supponendo che l’indirizzo ip è 192.168.125.122 e il dominio è example.com, nel file /etc/hosts va riportato:

192.168.125.122    example.com