Apache Httpd: Creiamo un Name-Based Virtual Host

Con questa guida spieghieremo brevemente come configurare un virtual host con Apache Httpd basato sui nomi di dominio.

Con Apache Httpd abbiamo due tipi di Virtual Host: IP-Based e Name-Based. Il Virtual Host basato su IP richiede che per ogni dominio ci sia un indirizzo IP, mentre per il Name-Based basta solo un indirizzo IP.

In determinate situazioni la soluzione Name-Based è senza dubbio la più semplice ed economica in quanto con un solo IP possiamo avere diversi domini sulla stessa macchina.

File hosts

Come primo passo configuriamo con il nostro editor di testo preferito, il file /etc/hosts aggiungendo le entry con i nomi di dominio virtuali in modo che puntino tutti all'indirizzo 127.0.0.1 (ovvero localhost).

Ad esempio:

127.0.0.1  localhost localhost.localdomain lotar
127.0.0.1  foo.lotar bar.lotar baz.lotar
[...]

Salviamo e facciamo un test con ping:

$ ping foo.lotar
PING foo.lotar (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.051 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.081 ms
^C
--- foo.lotar ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.051/0.066/0.081/0.015 ms

httpd.conf

Sempre con il nostro editor di testo aggiungiamo alla fine del file httpd.conf le configurazioni necessarie per indicare quale directory corrisponde ad un nome di dominio.

Ad esempio:

<VirtualHost *:80>
    ServerName lotar.local
    ServerAlias lotar.* localhost
    DocumentRoot /srv/httpd/htdocs/
</VirtualHost>
 
<VirtualHost *:80>
    ServerName foo.lotar.local
    ServerAlias foo.*
    DocumentRoot /www/foo
</VirtualHost>
 
<VirtualHost *:80>
    ServerName bar.lotar.local
    ServerAlias bar.*
    DocumentRoot /www/bar
</VirtualHost>
 
<VirtualHost *:80>
    ServerName baz.lotar.local
    ServerAlias bar.*
    DocumentRoot /www/baz
</VirtualHost>

Con questa configurazione abbiamo creato un VirtualHost sulla porta 80 ed abbiamo indicato:

  • ServerName : indicando come nome, l'alias che abbiamo configurato nel file /etc/hosts
  • ServerAlias : un ulteriore alias nel caso in cui il sito deve essere raggiungibile con un nome diverso di dominio (ad esempio: foo.lotar.localdomain)
  • DocumentRoot : la directory effettiva del sito

La configurazione appena effettuata funzionerà solamente sulla nostra macchina ma nel caso in cui siamo in una rete interna (LAN casalinga, dell'ufficio, etc) bisognerà configurare il server DNS in modo da risolvere tutti i nomi di dominio con l'IP della macchina dove è installato Apache HTTPD.