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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"
Debian 9 "stretch"


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


Warning.png ATTENZIONE
La guida è compatibile anche con Debian Stretch, basta tener presente che la directory web root di Apache è diventata /var/www/html. Questo valore va quindi sostituito, nel resto della guida, al valore presentato: /var/www.


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 /var/log/www.esempio.it
# cd ../www.esempio.org
# mkdir www
# mkdir cgi-bin
# mkdir /var/log/www.esempio.org

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 file 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  www.esempio.it
        ServerAlias esempio.it


        # Indexes + Directory Root.
        DirectoryIndex index.html index.htm index.php
        DocumentRoot /var/www/esempio.it/
        Alias /phpmyadmin /usr/share/phpmyadmin
        Alias /mailmanager /var/www/mailmanager

        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>

        <Directory /var/www/esempio.it/>
                Options -Indexes -FollowSymLinks +MultiViews
                AllowOverride All
                
                # Da Stretch
                Require all granted
                #Require ip 10.0.0.0/24
                #Require local

                # Fino a Jessie
                Order allow,deny
                Allow from all
                #Allow from 10.0.0.0/24
                #Allow from 192.168.90.0/24


	###############
	# Drupal Conf #
	###############
        # Da usare se il Virtual Host usa Drupal
                #RewriteEngine on
                #RewriteBase /
                #RewriteCond %{REQUEST_FILENAME} !-f
                #RewriteCond %{REQUEST_FILENAME} !-d
                #RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
	        #<ifModule mod_security2.c>
	        #       SecRuleEngine off
	        #</ifModule>
	###################
	# End Drupal Conf #
	###################

        </Directory>


	####################
	# Webalizer Conf  ##
	####################
        #<Directory /var/www/esempio.it/webalizer/>
                #Options Indexes FollowSymLinks MultiViews
                #AllowOverride None
                #Order allow,deny
                #Allow from all
                #Allow from 10.0.0.0/24
                #Allow from 192.168.90.0/24
                #Autenticazione
                #AuthType Digest
                #AuthName "utente"
                #AuthUserFile  /var/www/esempio.it/www/webalizer/.htpasswd
                #require valid-user
        #</Directory>
	######################
	# End Webalizer Conf #
	######################


        # CGI Directory
        #ScriptAlias /cgi-bin/ /var/www/esempio.it/cgi-bin/
        #<Location /cgi-bin>
        #        Options +ExecCGI
        #</Location>

        # Logfiles
        # Ricordarsi di creare la directory
        ErrorLog  /var/log/apache2/www.esempio.it/error.log
        CustomLog /var/log/apache2/www.esempio.it/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  www.esempio.org
        ServerAlias esempio.org

        # Indexes + Directory Root.
        DirectoryIndex index.html index.htm index.php
        DocumentRoot /var/www/esempio.org/
        Alias /phpmyadmin /usr/share/phpmyadmin
        Alias /mailmanager /var/www/mailmanager

        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>

        <Directory /var/www/esempio.org/>
                Options -Indexes -FollowSymLinks MultiViews
                AllowOverride All
 
               # Da Stretch
                Require all granted
                #Require ip 10.0.0.0/24
                #Require local

                # Fino a Jessie
                Order allow,deny
                Allow from all
                #Allow from 10.0.0.0/24
                #Allow from 192.168.90.0/24



	###############
	# Drupal Conf #
	###############
        # Da usare se il Virtual Host usa Drupal
                #RewriteEngine on
                #RewriteBase /
                #RewriteCond %{REQUEST_FILENAME} !-f
                #RewriteCond %{REQUEST_FILENAME} !-d
                #RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
	        #<ifModule mod_security2.c>
	        #       SecRuleEngine off
	        #</ifModule>
	###################
	# End Drupal Conf #
	###################

        </Directory>


	####################
	# Webalizer Conf  ##
	####################
        #<Directory /var/www/esempio.org/webalizer/>
                #Options Indexes FollowSymLinks MultiViews
                #AllowOverride None
                #Order allow,deny
                #Allow from all
                #Allow from 10.0.0.0/24
                #Allow from 192.168.90.0/24
                #Autenticazione
                #AuthType Digest
                #AuthName "utente"
                #AuthUserFile  /var/www/esempio.org/www/webalizer/.htpasswd
                #require valid-user
        #</Directory>
	######################
	# End Webalizer Conf #
	######################


        # CGI Directory
        #ScriptAlias /cgi-bin/ /var/www/esempio.org/cgi-bin/
        #<Location /cgi-bin>
        #        Options +ExecCGI
        #</Location>

        # Logfiles
        # Ricordarsi di creare la directory
        ErrorLog  /var/log/apache2/www.esempio.org/error.log
        CustomLog /var/log/apache2/www.esempio.org/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:

# service apache2 reload
# service apache2 restart

Configurazione di PhpMyAdmin

Giunti fino a qui rimane da fare un’unica cosa: configurare PhpMyAdmin per poter gestire il proprio database MySQL tramite sito Web. Supponendo di avere già un'installazione funzionante di PhpMyAdmin che agisce a livello globale, dobbiamo creare un alias su ogni sito sul quale vogliamo rendere disponibile PhpMyAdmin; l’alias si rende necessario poiché l’installazione di PhpMyAdmin viene effettuata nella directory /usr/share/phpmyadmin, che non è accessibile dai Virtual Host.

Configurare l’alias è molto semplice: aprendo i file di configurazione dei due domini citati precedentemente, basta aggiungere questa riga dopo l’istruzione DocumentRoot:

Alias /phpmyadmin /usr/share/phpmyadmin

Dopo aver chiuso e salvato i file di configurazione, basta far ripartire Apache per poter utilizzare PhpMyAdmin su ogni Virtual Host.
Tenete presente che, se PhpMyAdmin è configurato con un livello di sicurezza ‘cookie’, nome utente e password richiesti per entrare in PhpMyAdmin non sono altro che gli utenti definiti in MySQL, per cui bisogna fare attenzione alle autorizzazioni che si assegnano ai vari database onde evitare che certi utenti possano accedere a database non di loro competenza.

Verifica

Se abbiamo fatto tutto correttamente, digitando sul nostro browser i due indirizzi:

  • www.esempio.it
  • www.esempio.org

dovrebbero apparirci i due siti web, mentre digitando:

  • www.esempio.it/phpmyadmin
  • www.esempio.org/phpmyadmin

dovrebbe apparirci la schermata di login di phpMyAdmin.

Amministrazione

Se avete la necessità di concedere ad ogni proprietario di un dominio la possibilità di accedere via FTP alla propria DocumentRoot, senza lasciarlo uscire da quella e senza permettergli di navigare nelle DocumentRoot degli altri utenti, consiglio di seguire questa guida: Installare un server FTP con utenti virtuali su MySQL.




Guida scritta da: Ferdybassi 23:46, 6 nov 2010 (CET) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized