23.9. Host virtuali

Grazie agli host virtuali è possibile gestire più domini con un solo server web, risparmiandosi in tal modo spese e manutenzione che si ha con un server per ogni dominio. Vi sono diversi modi per realizzare l'hosting virtuale:

23.9.1. Hosting virtuale basato su nome

In questo caso una istanza di Apache gestisce diversi domini. Non è richiesta l'impostazione di diversi indirizzi IP per un sistema. Si tratta della alternativa che presenta le minori difficoltà, ed è quindi da preferire. Consultate la documentazione di Apache per sapere di più sui possibili svantaggi dell'hosting virtuale basato su nome.

La configurazione si realizza direttamente tramite il file di configurazione /etc/httpd/httpd.conf. L'hosting virtuale basato su nome si abilita tramite una direttiva: NameVirtualHost * . Basta indicare * , per fare accettare ad Apache tutte le richieste in entrata. In seguito di devono configurare i singoli host virtuali:

<VirtualHost *> 
    ServerName www.aziendauno.it 
    DocumentRoot /srv/www/htdocs/aziendauno.it
    ServerAdmin webmaster@aziendauno.it 
    ErrorLog /var/log/httpd/www.aziendauno.it-error_log 
    CustomLog /var/log/httpd/www.aziendauno.it-access_log common
</VirtualHost> 

Con Apache il percorso per i file di log si dovrebbe modificare da /var/log/httpd a /var/log/apache2. Anche per il dominio ospitato originariamente dal server (www.aziendauno.it) deve esservi una registrazione VirtualHost. Nel nostro esempio, lo stesso server gestisce accanto al domino originario un secondo dominio (www.aziendadue.it).

Anche le direttive VirtualHost, come nel caso di NameVirtualHost, hanno un *. Apache mappa la richiesta all'host virtuale in base al campo host nell'intestazione HTTP. La richiesta viene fatta pervenire all' host virtuale il cui ServerName corrisponde al nome host indicato in questo campo.

Per quel che riguarda le direttive ErrorLog e CustomLog i file di log non devono necessariamente contenere il nome di dominio, si possono utilizzare dei nomi a caso.

Serveradmin indica l'indirizzo e-mail dell' amministratore a cui rivolgersi in caso di difficoltà. Se si verificano degli errori Apache indicherà questo indirizzo nella comunicazione di errore che invia al client.

23.9.2. Hosting virtuale basato sull'IP

In questo caso bisogna impostare diversi indirizzi IP per una macchina. Una istanza di Apache amministrerà diversi domini, laddove ogni dominio disporràdi un indirizzo IP. Nel seguente esempio illustreremo come configurare Apache in modo da ospitare oltre al suo indirizzo IP originario 192.168.1.10 anche due domini con due ulteriori indirizzi IP (192.168.1.20 e 192.168.1.21). Questo esempio concreto funziona solo in una Intranet, dato che gli indirizzi IP tra 192.168.0.0 e 192.168.255.0 non vengono instradati su Internet.

23.9.2.1. Impostare l'aliasing degli IP

Affinché Apache possa ospitare diversi indirizzi IP, il sistema su cui gira deve accettare delle richieste per indirizzi IP diversi. In questi casi si parla di multi-IP hosting; per realizzare ciò si deve innanzitutto abilitare l'aliasing di indirizzi IP nel kernel, cosa che in è già impostato di default.

Se il kernel è stato configurato per consentire l'aliasing di indirizzi IP, tramite i comandi ifconfig e route si possono impostare ulteriori indirizzi IP. Per poter immettere questi comandi bisogna entrare nel sistema come root. Nel seguente esempio partiamo dal presupposto che il sistema abbia già un proprio indirizzo IP, ad esempio 192.168.1.10 assegnato al dispositivo di rete eth0.

L'IP della macchina si lascia visualizzare immettendo ifconfig. Ulteriori indirizzi IP si aggiungono ad esempio con

/sbin/ifconfig eth0:0 192.168.1.20
/sbin/ifconfig eth0:1 192.168.1.21

Gli indirizzi IP vanno assegnati allo stesso dispositivo di rete fisico (eth0).

23.9.2.2. Host virtuali con IP

Dopo aver configurato l'aliasing di indirizzi IP o dopo aver installato diverse schede di rete, si può proseguire con la configurazione di Apache. Per ogni server virtuale si indica un proprio blocco VirtualHost:

<VirtualHost 192.168.1.20>
    ServerName www.aziendadue.it
    DocumentRoot /srv/www/htdocs/aziendadue.it
    ServerAdmin webmaster@aziendadue.it
    ErrorLog /var/log/httpd/www.aziendadue.it-error_log
    CustomLog /var/log/httpd/www.aziendadue.it-access_log common
</VirtualHost>

<VirtualHost 192.168.1.21>
    ServerName www.aziendatre.it
    DocumentRoot /srv/www/htdocs/aziendatre.it
    ServerAdmin webmaster@aziendatre.it
    ErrorLog /var/log/httpd/www.aziendatre.it-error_log
    CustomLog /var/log/httpd/www.aziendatre.it-access_log common
</VirtualHost>

Qui si indicano le direttive VirtualHost per ulteriori domini, il dominio originario (www.aziendauno.it) viene configurato attraverso le relative impostazioni (DocumentRoot etc.) all'infuori dei blocchi VirtualHost.

23.9.3. Più istanze di Apache

Nei metodi fin qui descritti gli amministratori di un dominio possono leggere i dati degli altri domini. Se si vogliono isolare i singoli domini si possono lanciare più istanze di Apache con impostazioni proprie per User, Group etc. nel file di configurazione.

Nel file di configurazione con la direttiva Listen si indica quale istanza di Apache è responsabile per quale indirizzo IP. Per la prima istanza di Apache, riprendendo l'esempio di prima, la direttiva sarà:

Listen 192.168.1.10:80

Per le altre due istanze rispettivamente:

Listen 192.168.1.20:80
Listen 192.168.1.21:80