lunedì 3 agosto 2009

Configurazione dei Virtual Hosts (alias) con Apache2 su Debian ETCH

Premessa

Questo tutorial non intende in nessun modo sostituire la reference ufficiale di Apache, per cui descrizioni dettagliate delle singole parti dei files di configurazione possono essere trovate nel sito ufficiale di Apache.


Introduzione

Nella guida precedente abbiamo parlato dell'installazione e la configurazione di un server LAMP con Debian, Apache2, MySQL e PHP, passiamo adesso alla configurazione dei singoli virtual hosts (ovvero degli hosts virtuali).


Il VirtualHosting consente la gestione di più domini basandosi sul loro nome ma non sul loro IP ed è una pratica ampiamente utilizzata in quanto è facile immaginare il gap di guadagno semplicemente immaginando il costo di una farm costituita da una serie di server che ospitano ciascuno un dominio diverso ed un solo server che ospita diversi domini diversi. L'unico appunto che può essere fatto a questa metodologia di gestione è che effettivamente se si ha un dominio molto attivo esso potrebbe monopolizzare le risorse di sistema lasciando solo la rimanenza delle risorse agli altri domini hostati difatti questo tipo di configurazione abitualmente è utilizzata per ospitare domini che non generano traffico eccessivo.


Se avete seguito la guida sull'installazione e la configurazione di un server LAMP con Debian non è necessario altro infatti l'intento di questo tutorial è dare le basi per la configurazione dei virtual hosts.


Per prima cosa prendiamo nota della DocumentRoot impostata nel file di configurazione di Apache2 digitando:


cat /etc/apache2/apache2.conf | grep DocumentRoot


di default la DocumentRoot è /var/www e utilizzerò questo riferimento nel resto del tutorial, tuttavia può essere facilmente modificata editando /etc/apache2/apache2.conf cercando la riga contenente DocumentRoot (per esempio con vim vi basterà digitare /DocumentRoot ) e modificando il percorso (ricordatevi che dovete creare la directory interessata prima di procedere al riavvio di apache tramite il comando /etc/init.d/apache2 reload ).

Cerchiamo di configurare l'ambiente per un dominio generico che con un po' di fantasia chiameremo miodominio.com . Adesso che conosciamo la nostra DocumentRoot possiamo creare una directory al suo interno:


mkdir /var/www/miodominio.com


che non renderemo pubblica ed una directory public che invece renderemo pubblica per cui:


mkdir /var/www/miodominio.com/public


creiamo anche una directory che useremo per l'utilizzo degli script CGI e vedremo in seguito come utilizzarla:


mkdir /var/www/miodominio.com/cgi-bin


e quindi procediamo con la creazione del file di configurazione per il dominio che vogliamo configurare, quindi creiamo e cominciamo a compilare il file suddetto col comando


vim /etc/apache2/sites-available/miodominio.com


inserendovi il seguente testo che analizzeremo riga per riga:


<VirtualHost *:80 >

ServerAdmin webmaster@miodominio.com

ServerName www.miodominio.com

DocumentRoot /var/www/miodominio.com/public

Alias /phpmyadmin "/usr/share/phpmyadmin"

<Directory "/var/www/miodominio.com/public">

Order Deny,Allow

Allow from all

Options -Indexes

</Directory>

<Directory "/var/www/miodominio.com/cgi-bin">

AllowOverride None

Options ExecCGI -MultiViews +SymLinksIfOwnerMatch -Indexes

Order allow,deny

Allow from all

</Directory>

ErrorLog /var/log/apache2/error_miodominio.net.log

LogLevel warn

CustomLog /var/log/apache2/access_miodominio.net.log combined

ServerSignature On

</VirtualHost>


procediamo all'analisi della configurazione riga per riga:


<VirtualHost *:80 >

è il tag che indica che devono essere processate le richieste indirizzate alla porta 80 (che comunque è quella di default) di tutti gli IP configurati nella macchina


ServerAdmin webmaster@miodominio.com

serve per indirizzare correttamente le richieste di supporto in caso di errori (pagine mancanti, richieste con accesso negato, ecc)


ServerName www.miodominio.com

viene utilizzato per configurare il nome di dominio da gestire e che lo distinguerà dagli altri


DocumentRoot /var/www/miodominio.com/public

ci dice in quale directory saranno indirizzate le richieste di connessione per il nome di dominio specificato nella riga precedente ed è anche la directory che quindi dovrebbe contenere l'index


Alias /phpmyadmin "/usr/share/phpmyadmin"

in questo modo impostiamo un alias di dominio ovvero digitando sul browser www.miodominio.com/phpmyadmin verremo indirizzati a quella directory che contiene il software phpmyadmin e quindi potremo amministrare il database


<Directory "/var/www/miodominio.com/public">

con questo tag cominciamo la configurazione dei permessi della directory public


Order Deny,Allow

definisce l'ordine di processamento dei permessi; nella fattispecie prima le negazioni di servizio (nel caso ci dovessero essere) e poi gli accessi


Allow from all

siccome nel nostro esempio non ci preoccupiamo di negare l'accesso in quanto vogliamo che il sito sia perfettamente accessibile dall'esterno consentiamo l'accesso a tutti


Options -Indexes

serve per restituire un messaggio di errore se nella directory nella quale si tenta l'accesso non è presente un file index , ciò serve per evitare di rendere pubblico materiale al quale non sono presenti collegamenti diretti


</Directory>

chiude il tag aperto poco prima


<Directory "/var/www/miodominio.com/cgi-bin">

con questo tag cominciamo a configurare la directory che conterrà gli script cgi


AllowOverride None

con questa opzione diciamo esplicitamente ad apache di non leggere il file .htaccess anche se presente perchè di fatto in questa directory non serve


Options ExecCGI -MultiViews +SymLinksIfOwnerMatch -Indexes

la descrizione di questa direttiva è un po' più lunga delle altre perchè ci sono un paio di opzioni di cui parlare (rimando al sito ufficiale per la documentazione dettagliata ed in inglese). Con ExecCGI consentiamo l'esecuzione di scripts CGI se è abilitato il modulo mod_cgi; con -MultiViews facciamo in modo che quando viene richiamata tramite browser la directory /var/www/miodominio.net/cgi-bin/qualcosa e questa directory non esistesse apache NON (vedi il - antecedente l'opzione) cerca un qualunque file in /var/www/miodominio.net/cgi-bin/ del tipo qualcosa.* ; con +SymLinksIfOwnerMatch facciamo in modo che Apache segua i links simbolici di sistema contenuti in questa directory solo se il proprietario del file o della directory di destinazione è lo stesso utente proprietario del link ; la -Indexes l'abbiamo vista prima


Order allow,deny

Allow from all

</Directory>


queste tre righe le abbiamo analizzate prima


ErrorLog /var/log/apache2/error_miodominio.net.log

questa riga serve per specificare il file in cui scrivere gli errori di apache che vengono riscontrati dagli utenti in fase di navigazione; è bene impostare un nome di questo file diverso per ogni dominio per facilitarne la lettura


LogLevel warn

con questa opzione dichiariamo il livello "verbosità" dei log e possiamo scegliere tra debug, info, notice, warn, error, crit, alert, emerg


CustomLog /var/log/apache2/access_miodominio.net.log combined

questa direttiva serve per tenere traccia delle richiesta al server apache


ServerSignature On

indica al server di includere la "firma" nel footer dei messaggi di errore, che include il nome del server ed il tipo di sistema operativo che si sta utilizzando


</VirtualHost>

questa indica la chiusura del tag VirtualHost


Per abilitare finalmente il nostro dominio sul server bastano due soli comandi


a2ensite miodominio.com

/etc/init.d/apache2 reload


col primo abilitiamo il nostro dominio creando un symlink a /etc/apache2/sites-available/miodominio.com in /etc/apache2/sites-enabled/miodominio.com e per disabilitarlo possiamo utilizzare i comandi


a2dissite miodominio.com

/etc/init.d/apache2 reload


ricordiamo sempre di ricaricare la cache di configurazione di apache ogni volta che viene modificato un file di configurazione.


Fatto ciò se i DNS sono aggiornati il nuovo sito sarà raggiungibile all'indirizzo www.miodominio.com.

Nessun commento:

Posta un commento