OScene

OScene.net - Scenario O(perating)pen S(ystem)ource - Il punto di riferimento per i SysAdmin italiani.

Home » » HowTo: Configurazione dei Virtual Hosts (alias) con Apache2 su Debian ETCH

ApachePremessa
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.

Da evitareScarsoMedioBuonoOttimo (2 votes, average: 4.5 out of 5)
Loading ... Loading ...
AddThis Social Bookmark Button
22 December 2007 | Commenti (15)

Commenti

  1. Antonio Barba - 4 January 2008 alle 16:34

    salvo r0x :D

  2. Salvatore Barbera - 12 January 2008 alle 0:08

    se trovate errori o imprecisioni commentate che provvederò a correggere quanto prima :)

  3. Fabio - 26 January 2008 alle 3:26


    se trovate errori o imprecisioni commentate che provvederò a correggere quanto prima :)

    Ottima guida, e mi sembra anche perfettamente corretta ;)

  4. Vincenzo Fiore Marrese - 20 February 2008 alle 2:30

    Salve,
    complimenti per la tua guida e grazie per averla resa disponibile.

    Vista la tua competenza, se non ti dispiace, mi permetto di porti una questione appunto su Apache.
    Se non è la sede adatta, perdonami.

    Ho un problema con un sito ospitato su un server Apache 2.0 da Aruba.
    Non sto ad entrare nei particolari che esulano dall’argomento del tuo tutorial, ma ho notato una cosa strana su vari siti di Aruba che sono tutti su server Apache.
    In pratica se digito http://ftp.nomesito.estensione (sì lo so che è scorretto, ma seguimi lo stesso) mi arriva un messaggio del tipo:

    http://ftp.nomesito.estensione
    sito in costruzione
    hosting su piattaforma Apache/2.0

    Il fatto è che non sono siti in costruzione.

    Dopo una serie di ricerche ho notato che succede su tutti i siti che Aruba ospita su Apache, mentre per quelli che ospita su IIS non succede e viene fuori un altro messaggio:

    http://ftp.miosito.it
    Server Status:
    Server up

    Che cosa ne pensi?

    Se mi puoi dare un parere ti sarei molto grato.

    Grazie, in ogni caso.

    Saluti.

  5. Salvatore Barbera - 20 February 2008 alle 9:46

    @Vincenzo: grazie per i complimenti :)

    per qanto riguarda la questione di quei domini di terzo livello è possibile che abbiamo configurato solo con Apache di default i domini di terzo livello con nome http://ftp.nomesito.ext e quindi risultano raggiungibili dalla porta 80, in realtà secondo il mio modesto parere (lungi da me mettermi a paragone dei sistemisti di aruba) è un piccolo errore in fase di implementazione del servizio che rimanda alla pagina di default “Sito in costruzione”.

    Non dovrebbe accadere, però non è nemmeno una cosa grave…

    Grazie della lettura e torna a trovarci!

  6. Vincenzo Fiore Marrese - 20 February 2008 alle 11:10

    Ciao,
    grazie davero per la risposta immediata.

    Buon lavoro e torenerò a trovarvi di sicuro, visto che, tra l’altro, lavoro con GNU/Linux…

    A presto.

  7. Alessandro - 19 May 2008 alle 15:22

    Ciao a tutti, ho seguito questo tutorial ed il precedente. Tutto è andato liscio, ma alla fine digitando l’URL del dominio, come nell’esempio: http://www.miodominio.com
    non succede nulla.
    Ho problemi con i DNS? Se si come faccio a risolverli?

  8. Salvatore Barbera - 19 May 2008 alle 18:59

    @Alessandro:

    bhè per usare: miodominio.com o comunque un dominio di secondo livello ci sono alcuni passi da compiere…
    1) devi avere un IP (statico)
    2) devi aver comprato un dominio di secondo livello
    3) devi dire a chi ti ha venduto il dominio di secondo livello di puntare i suoi DNS al tuo IP (statico)

    io adesso non conosco la tua situazione ma in alternativa se ti interessasse solo raggiungere un server dentro la tua LAN da una macchina anch’essa interna alla rete devi impostare nel router (o in un server DNS interno alla tua rete) un URL che punti al server web opportunamente configurato.

    Se non dovessi avere un IP statico e un dominio di secondo livello puoi registrarti presso www . no-ip . com o a www . dyndns . com (ovviamente togliendo gli spazi) e puntare un dominio di terzo livello al tuo IP dinamico, il che è fattibile installando gli appositi tools che questi due siti mettono a disposizione e che periodicamente dicono al server qual’è il tuo attuale IP. Esiste (ed uso) il pacchetto no-ip per debian e lo puoi installare digitando da root:

    apt-get install no-ip

    e seguendo le istruzioni con un pò di dimestichezza con l’inglese riuscirai sicuramente a destreggiarti.

    Spero di essere stato chiaro e soprattutto utile… fammi sapere com’è andata ;)

  9. Alessandro - 21 May 2008 alle 18:50

    Proverò a fare come hai detto. Ovviamente io ho un indirizzo IP dinamico. Comunque se non ricordo male comprai un giornale dove c’era un intero articolo che spiegava come crearsi un dominio partendo da un IP dinamico, appunto citando www . dyndns . com

    In ogni modo ti farò sapere…Ciao e grazie!

  10. Ricerche IT » Hosting virtuale con Debian: server Web Apache - 2 June 2008 alle 10:01

    [...] Link di riferimento Gestione Moduli e Virtual Hosts di Apache2 su Debian e Ubuntu HowTo: Configurazione dei Virtual Hosts (alias) con Apache2 su Debian ETCH [...]

  11. vittorio - 10 June 2008 alle 23:39

    ciao ho letto la configurazione del server che ben hai descritto, ti chiedo una informazione, io ho installato wamp server “integrato” in teoria fa tutto da solo, ma ho inserito 2 siti sotto la directory c:/wamp/www/.. “sito1, sito2 , questi vengono visti da apache , ma se provo a collegarmi da esterno non riesco ad accedere al sito, mi sai dare una informazione grazie vittorio

  12. Salvatore Barbera - 11 June 2008 alle 16:32

    @vittorio: anche per te è un problema di DNS, quindi ti consiglio di vedere il consiglio che ho dato ad alessandro un paio di commenti fa con la differenza che visto che (ahimè) stai lavorando con windows puoi scaricare direttamente dal sito di no-ip il tool per gestire il DNS per un dominio di terzo livello :)

  13. Marco - 13 June 2008 alle 10:56

    Ciao, ho seguito la guida, molto ben dettagliata, ma continuo ad avere un errore:

    sudo /etc/init.d/apache2 reload
    * Reloading web server config apache2 [Fri Jun 13 11:34:49 2008] [error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
    [Fri Jun 13 11:34:49 2008] [error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
    [Fri Jun 13 11:34:49 2008] [warn] NameVirtualHost *:0 has no VirtualHosts

    dove sbaglio? apache è su, vedo la root (It Works!), ma se chiamo i nomi dei siti configurati in virtualhost mi da questo errore..

    tra l’altro la voce NameVirtualHost non la vedo in nessun file di configurazione..

    mi puoi aiutare?

    ciao grazie

  14. devil - 1 July 2008 alle 10:45

    Ciao, io non trovo la DocumentRoot ne in /var/www e nemmeno

    nel file di configurazione di Apache.

    Infine ho ricevuto questo errore:

    akira@Amon ~ $ sudo /etc/init.d/apache2 reload
    * Reloading web server config apache2 [Tue Jul 01 13:37:12 2008] [error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
    [ OK ]

    Ciao e grazie…

  15. Salvatore Barbera - 6 July 2008 alle 3:36

    @devil & marco: DocumentRoot è un’impostazione del file di configurazione di Apache (/etc/apache2/apache2.conf) in genere questa impostazione di default è impostata su /var/www

    per risolvere il secondo errore dovreste aggiungere allo stesso file di configurazione d i cui sopra la riga:
    ServerName localhost

    comunque sia vi consiglio di dare un’occhiata su:
    http://www.oscene.net/site/sysadmin/web-server/howto-installazione-e-configurazione-di-un-web-server-lamp-linux-apache2-mysql-5-e-php5-su-debian

    scusate il ritardo nella risposta…

Aggiungi un commento

XHTML: I tag consentiti sono: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>