Apache e Virtual Hosts: configurare Apache2 per ospitare più siti web

Da Guide@Debianizzati.Org.
Versione del 6 nov 2010 alle 22:43 di Ferdybassi (discussione | contributi) (Nuova pagina: __TOC__ == 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 su...)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Vai alla navigazione Vai alla ricerca

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