Apache e Virtual Hosts: configurare Apache2 per ospitare più siti web
Introduzione
Uno dei casi più frequenti in cui ci si può imbattere nella configurazione di un web server Apache è il problema di dover ospitare più di un sito web sullo stesso server, avente un solo indirizzo IP pubblico.
Ad esempio supponiamo di avere installato un web server Apache all'indirizzo 192.168.1.1 e supponiamo di voler ospitare su questo server i siti web www.esempio.it e www.esempio.org
Ci sono diversi metodi per ottenere questo risultato: il più semplice è probabilmente quello di utilizzare la direttiva NameVirtualHost
.
Prerequisiti
- I record DNS dei due domini www.esempio.it e www.esempio.org devono essere configurati per puntare all'indirizzo IP pubblico del nostro server Apache, nel nostro caso 192.168.1.1
- Sul server in questione deve essere installato e funzionante un server Apache. Si segua ad esempio questa guida: Installare un ambiente LAMP: Linux, Apache2, SSL, MySQL, PHP5
Configurazione dei Virtual Hosts
Innanzitutto prepariamo la struttura di directory che dovrà ospitare i siti legati ai due domini web di esempio:
# cd /var/www # mkdir www.esempio.it # mkdir www.esempio.org # cd www.esempio.it # mkdir www # mkdir cgi-bin # mkdir logs # cd ../www.esempio.org # mkdir www # mkdir cgi-bin # mkdir logs
Secondo questa struttura, le pagine del sito www.esempio.it andranno collocate nella directory /var/www/www.esempio.it/www
, mentre quelle relative al dominio www.esempio.org andranno collocate nella directory /var/www/www.esempio.org/www
.
Fatto questo, spostiamoci nella directory dove Apache2 definisce i siti web e creiamo i files di configurazione per i due nuovi virtual host:
# cd /etc/apache2/sites-available # nano www.esempio.it
Il contenuto dovrà essere simile al seguente:
# # www.esempio.it # <VirtualHost *:80> ServerAdmin webmaster@esempio.it ServerName esempio.it ServerAlias esempio.it # Indexes + Directory Root. DirectoryIndex index.html DocumentRoot /var/www/www.esempio.it/www/ # CGI Directory ScriptAlias /cgi-bin/ /var/www/www.esempio.it/cgi-bin/ <Location /cgi-bin> Options +ExecCGI </Location> # Logfiles ErrorLog /var/www/www.esempio.it/logs/error.log CustomLog /var/www/www.esempio.it/logs/access.log combined </VirtualHost>
Allo stesso modo creiamo il secondo virtual host:
# nano www.esempio.org
con contenuto:
# # www.esempio.org # <VirtualHost *:80> ServerAdmin webmaster@esempio.org ServerName esempio.org ServerAlias esempio.org # Indexes + Directory Root. DirectoryIndex index.html DocumentRoot /var/www/www.esempio.org/www/ # CGI Directory ScriptAlias /cgi-bin/ /var/www/www.esempio.org/cgi-bin/ <Location /cgi-bin> Options +ExecCGI </Location> # Logfiles ErrorLog /var/www/www.esempio.org/logs/error.log CustomLog /var/www/www.esempio.org/logs/access.log combined </VirtualHost>
Controlliamo che il file /etc/apache2/ports.conf
abbia contenuto simile al seguente:
NameVirtualHost *:80 Listen 80 <IfModule mod_ssl.c> # SSL name based virtual hosts are not yet supported, therefore no # NameVirtualHost *:443 Listen 443 </IfModule>
A questo punto disabilitiamo il sito di default di Apache2:
# a2dissite default
abilitiamo i due virtual hosts appena creati:
# a2ensite www.esempio.it # a2ensite www.esempio.org
e riavviamo Apache:
# /etc/init.d/apache2 reload # /etc/init.d/apache2 restart