Come illustrato nelle lezioni precedenti, la tecnica del Virtual Hosting permette di servire più siti web con la medesima istanza di Apache. Questa verrà opportunamente configurata per gestire correttamente le richieste in arrivo dall'esterno e smistarle ai vari siti ospitati.
La sintassi usata da Apache per i suoi file di configurazione utilizza una direttiva apposita per la definizione e la configurazione dei virtual host: la direttiva VirtualHost.
La direttiva VirtualHost
La direttiva VirtualHost
ricopre una duplice funzione: da una parte, consente di definire i criteri in base ai quali i vari virtual host presenti nella configurazione possono essere distinti senza ambiguità, così da consentire ad Apache di rispondere alle richieste con il sito corretto; dall'altra, permette di racchiudere al suo interno dei parametri di configurazione specifici per il virtual host a cui si riferisce.
Sintassi
La direttiva contiene un parametro che specifica il criterio con cui distinguere il virtual host in oggetto dagli altri. Nella sua forma più semplice, tale parametro contiene l'indirizzo IP del virtual host al quale pervengono le richieste. Come indicato nelle lezioni precedenti, tale criterio richiede la presenza di più indirizzi IP (siano essi sulla stessa interfaccia o assegnati a più interfacce) affinchè possa essere usato correttamente. Se il server disponesse di un solo IP pubblico, non si potrebbero distinguere più virtual host in base al loro indirizzo IP.
Un esempio di utilizzo della direttiva Virtual Host con specifica dell'indirizzo IP è mostrato di seguito:
<VirtualHost 10.1.2.3:80>
ServerName miovirtualhost.com
DocumentRoot "/var/www/miovirtualhost.com"
ErrorLog "logs/miovirtualhost-error_log"
TransferLog "logs/miovirtualhost-access_log"
</VirtualHost>
Nel caso in oggetto, il server web risponderà con le pagine presenti in /var/www/miovirtualhost.com invece che con quelle della DocumentRoot
di default qualora le richieste in ingresso siano indirizzate all'indirizzo IP 10.1.2.3.
L'indirizzo IP associato al virtual host può essere sia di tipo IPv4 che IPv6. Nel caso di indirizzi IPv6 essi vanno racchiusi tra parentesi quadre. Ad esempio:
<VirtualHost [2001:db8::a00:20ff:fea7:ccea]:80>
ServerName miovirtualhost.com
DocumentRoot "/var/www/miovirtualhost.com"
ErrorLog "logs/miovirtualhost-error_log"
TransferLog "logs/miovirtualhost-access_log"
</VirtualHost>
La direttiva VirtualHost può contenere al suo interno qualsiasi direttiva di configurazione, ad eccezione di quelle che controllano direttamente le modalità di gestione dei processi di Apache. Le direttive specificate all'interno di una sezione VirtualHost
hanno la priorità per quel virtual host rispetto a quelle globali.
Configurazione modulare
Per configurare un nuovo virtual host è sufficiente creare un file di configurazione con la direttiva VirtualHost e salvarlo in sites-available. Quindi, per attivarlo basta creare un link simbolico al file appena creato in sites-enabled:
# ln -sf /etc/apache2/sites-available/miovirtualhost.conf /etc/apache2/sites-enabled/miovirtualhost.conf
Analogamente, per disattivarlo sarà sufficiente cancellare il link simbolico, senza effettivamente cancellare il file presente in sites-available.
Queste operazioni sono semplificate dalla presenza di due script: a2ensite e a2dissite, che come suggerito dai nomi, si occupano rispettivamente di attivare o disattivare un virtual host presente in sites-available. Ad esempio, digitando:
# a2ensite miovirtualhost
lo script creerà automaticamente il link simbolico in sites-enabled.
Altre distribuzioni (o altri sistemi Unix) ricorrono a sistemi analoghi per gesitire la configurazione dei virtual host con una certa modularità.