Utilizzando Apache Virtual Host, puoi eseguire più siti Web sullo stesso server.
Ad esempio, posso eseguire sia thegeekstuff.com che top5freeware.com su un singolo server fisico su cui è in esecuzione un server Web Apache.
Fig:Apache Virtual Host (più siti Web, un Apache)
Esistono due tipi di configurazioni dell'host virtuale Apache:1) Host virtuale basato su IP e 2) Host virtuale basato sul nome. L'host virtuale basato sul nome è consigliato per la maggior parte degli scenari.
Host virtuale basato su IP
In questa configurazione, quando punti due siti Web (con indirizzo IP diverso) al server che esegue Apache, quel server fisico dovrebbe avere due indirizzi IP diversi configurati.
Ciò significa che il server dovrebbe avere due schede ethernet, ciascuna configurata sull'indirizzo IP del sito Web corrispondente che l'host virtuale Apache servirà. Quindi, questo non è pratico per la maggior parte degli aspetti e non dovresti usarlo.
Nell'esempio seguente, il server contiene due schede NIC, una è configurata con 192.168.101.1 ip-address per thegeekstuff.com, un'altra è configurata con 192.168.102.1 per top5freeware.com. Entrambi questi indirizzi IP sono serviti da un singolo server Web Apache in esecuzione su quel server utilizzando un host virtuale basato su IP.
Fig:Host virtuale basato su IP Apache
Host virtuale basato sul nome
In questa configurazione, quando il server Web Apache riceve una richiesta, cerca il nome host nell'intestazione HTTP e, a seconda del nome host, gestisce diversi siti Web. Questo è molto semplice, poiché hai bisogno di un solo indirizzo IP su quel server fisico; ma aggiorni il DNS con più nomi di siti Web che puntano allo stesso indirizzo IP. Per tutti gli scopi pratici, utilizzerai solo la configurazione dell'host virtuale basata sul nome.
Nell'esempio seguente, il server contiene solo una scheda NIC, configurata con l'indirizzo IP 192.168.101.1. La voce DNS per il sito Web thegeekstuff.com e top5freeware.com punta all'indirizzo IP 192.168.101.1. Quando Apache riceve una richiesta, cerca la voce del nome host nell'intestazione HTTP e serve il sito Web corrispondente.
Fig:Host virtuale basato sul nome Apache
1. Decommentare httpd-vhosts.conf in httpd.conf
Se hai installato Apache 2 dal sorgente, per impostazione predefinita, la riga seguente sarà commentata nel file httpd.conf. Decommenta questa riga.
# vi /usr/local/apache2/conf/httpd.conf Include conf/extra/httpd-vhosts.conf
2. Configura host virtuali
Modifica httpd-vhosts.conf come mostrato di seguito per configurare l'impostazione dell'host virtuale basato su nome per due host.
- NameVirtualHost *:80 – Indica che tutti gli host virtuali basati sul nome saranno in ascolto sulla porta predefinita 80
- Nell'esempio seguente, stiamo configurando l'host virtuale per thegeekstuff.com e top5freeware.com in ascolto sulla stessa porta 80. Quindi, ci saranno due
- Quando vai su thegeekstuff.com, i file sotto /usr/local/apache2/docs/thegeekstuff saranno serviti da Apache; e access_log e error_log per questo sito andranno in /usr/local/apache2/logs/thegeekstuff
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/apache2/docs/thegeekstuff" ServerName thegeekstuff.com ServerAlias www.thegeekstuff.com ErrorLog "logs/thegeekstuff/error_log" CustomLog "logs/thegeekstuff/access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/apache2/docs/top5freeware" ServerName top5freeware.com ServerAlias www.top5freeware.com ErrorLog "logs/top5freeware/error_log" CustomLog "logs/top5freeware/access_log" common </VirtualHost>
3. Controlla la sintassi di configurazione di VirtualHost
Verifica la sintassi della configurazione virtuale utilizzando "httpd -S" come mostrato di seguito. Quando tutto è impostato correttamente, viene visualizzato semplicemente "Sintassi OK".
# /usr/local/apache2/bin/httpd -S VirtualHost configuration: Syntax OK
Quando qualcosa non è configurato correttamente, verrà visualizzato un messaggio di avviso, incluso il messaggio "la directory non esce" come mostrato di seguito.
# /usr/local/apache2/bin/httpd -S Warning: DocumentRoot [/usr/local/apache2/docs/top5freeware] does not exist Warning: ErrorLog [/usr/local/apache2/logs/thegeekstuff] does not exist Syntax OK
4. Riavvia l'Apache e prova
# /usr/local/apache2/bin/apachectl restart
Ora, quando vai su thegeekstuff.com (o www.thegeekstuff.com), apache servirà i file dalla directory /usr/local/apache2/docs/thegeekstuff.
Quando vai su top5freeware.com (o www.top5freeware.com), lo stesso apache in esecuzione sullo stesso server servirà i file dalla directory /usr/local/apache2/docs/top5freeware.
Giusto per ribadire, affinché l'host virtuale basato sul nome funzioni correttamente, la voce DNS per entrambi questi siti Web dovrebbe puntare allo stesso indirizzo IP esterno del server fisico su cui è in esecuzione il server Web Apache.