Home / Indice sezione
 www.icosaedro.it 

 Apache: host virtuali

Implementare in Apache il meccanismo degli host virtuali basati sul nome del dominio. Esempi usando un singolo PC, anche privo di connessione di rete.

Storico degli aggiornamenti

2004-08-21
Aggiunte indicazioni utili per Slackware 10.0.
2001-08-31
Incluso avvertimento sui possibili rischi del modello di sicurezza proposto e sulle possibili alternative.
2001-08-12
Inaugurazione di questa pagina.

Indice

Introduzione
Materiali necessari
Creiamo gli utenti
Creiamo i dominii
Configuriamo i dominii in Apache
Riavviamo Apache
Verifichiamo il tutto

Introduzione

Apache include il supporto per gli host virtuali basati sul nome di dominio, previsti dal protocollo HTTP versione 1.1. In sintesi si tratta di questo: con un solo server WEB e un solo indirizzo Internet, si possono comunque ospitare un numero arbitrario di siti WEB indipendenti. La gran parte dei siti WEB sono realizzati con questa tecnica. Si risparmia sui materiali (basta un solo computer), sugli indirizzi Internet (ne basta uno), sugli oneri di amministrazione (basta un solo WEB administrator per un numero arbitrario di siti ospitati, almeno in teoria).

Materiali necessari

Ci serve un computer con Apache installato. Una qualsiasi distribuzione di Linux dovrebbe avere gia' installato il server, per cui non mi dilunghero' su questo. Non serve disporre di un collegamento di rete, e neppure serve avere un collegamento Internet. Per le nostre prove basta un computer isolato. L'indirizzo IP del nostro host sara' l'indirizzo di loopback 127.0.0.1 che e' preconfigurato su ogni macchina sulla interfaccia di rete virtuale "lo". Il comando ifconfig ce lo conferma:

$ ifconfig
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:4968731 errors:0 dropped:0 overruns:0 frame:0 TX packets:4968731 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:383333456 (365.5 Mb) TX bytes:383333456 (365.5 Mb)

Creiamo gli utenti

Per ogni dominio creiamo un utente distinto: in questo modo il WEB manager, il WEB designer e tutti gli altri soggetti coinvolti nella gestione del sito WEB di quel dominio potranno lavorare come utenti distinti, accedere in FTP al proprio account e senza interferire con gli altri. Nei nostri esempi creeremo gli utenti tizio e caio. Per creare tizio facciamo questo:

# useradd tizio -g users

# passwd tizio
Changing password for user tizio
New UNIX password: ******
Retype new UNIX password: ******
passwd: all authentication tokens updated successfully

# chmod u=rwx,g=,o=x  /home/tizio

# mkdir /home/tizio/public_html

# chown tizio:users /home/tizio/public_html

# chmod u=rwx,g=,o=x /home/tizio/public_html

Dunque, abbiamo creato un utente tizio nel solito modo. Notare che abbiamo assegnato esplicitamente il nuovo utente al gruppo "users": questo devia dallo schema generale della distribuzione Red Hat, che per default crea un nuovo gruppo per ogni utente. Nella home dir. del nuovo utente abbiamo creato una sotto-directory public_html che conterra' il sito WEB. La particolarita' da notare e' che le directory create consentono l'attraversamento grazie al flag x: in questo modo Apache puo' raggiungere le pagine WEB. La sotto-directory public_html sara' utile quando l'utente tizio vorra' collocare nel proprio account programmi e informazioni riservate che non vuole siano raggiungibili attraverso il WEB. Ricordiamoci la password assegnata, che dovremo riferire al sig. Tizio!

ATTENZIONE!
Il modello di sicurezza per i permessi dei file e delle directory non è l'unico possibile, ma forse è il più semplice da applicare e da gestire. Lascia tuttavia qualche perplessità il dover rendere accessibile a "other" la propria home directory.

Esiste almeno un'altra soluzione che si basa sulla creazione di un gruppo per ciascun utente, paradigma scelto per default dalla distribuzione Red Hat. Le home directory degli utenti vanno poi rese attraversabili dal proprio gruppo. L'utente del server (nobody oppure apache) deve poi essere inserito nel gruppo di ciascun utente. Questa, in estrema sintesi la ricetta alternativa.

Creiamo i dominii

Poiche' dobbiamo esercitarci, e non vogliamo coinvolgere i veri DNS, ci bastera' aggiungere queste due righe al file /etc/hosts:

127.0.0.1  www.tizio.casa
127.0.0.1  www.caio.casa

Configuriamo i dominii in Apache

Individuare il file di configurazione di Apache httpd.conf. Nella distribuzione Red Hat 6.2 e 7.1 si trova in /etc/httpd/conf/httpd.conf, mentre in Slackware 10.0 si trova in /etc/apache/httpd.conf. Al termine di questo file c'e' la sezione destinata agli host virtuali. Assicurarsi che sia presente la direttiva

         NameVirtualHost 127.0.0.1:80

che attiva la funzionalita' degli host virtuali sulla solita porta 80 del nostro server. Creiamo il virtual host per il dominio www.tizio.casa:

<VirtualHost 127.0.0.1:80>
ServerName www.tizio.casa
DocumentRoot /home/tizio/public_html
ServerAdmin tizio@localhost
CustomLog logs/www.tizio.casa-access_log common
ErrorLog logs/www.tizio.casa-error_log
</VirtualHost>

Per gli altri domini virtuali si creeranno altrettanti utenti e altre sezioni VirtualHost similari, facendo attenzione a modificare di conseguenza il dominio, il path e l'indirizzo di posta, evidenziati in grassetto nell'esempio. Come ServerAdmin ho indicato in realta' l'utente tizio invece che il vero WEB administrator: di solito i problemi legati a un sito WEB sono locali a quel sito (pagine mancanti, CGI non funzionanti, ecc.) piuttosto che responsabilita' del WEB administrator.

Riavviamo Apache

Il comando da dare su Red Hat 6.2 e'

# /etc/rc.d/init.d/httpd restart

mentre su Red Hat 7.1 e 7.3 e'

# /etc/init.d/httpd restart

su Slackware 10.0 e':

# /etc/rc.d/rc.httpd restart

Se qualcosa e' andato storto, c'e' sempre il log file in /var/log/httpd (per Red Hat) oppure in /var/log/apache (in Slackware). Mentre facciamo le varie prove, e' bene aprire un terminale sul quale visualizzare con continuita' tutti i messaggi dei log, perche' sono molto utili. Il comando tail -f -n 1 * dato nella directory dei log fa al caso nostro.

Verifichiamo il tutto

Se e' tutto ok, puntiamo il WEB browser sull'URL http://www.tizio.casa/index.html: ci siamo dimenticati di creare la home page /home/tizio/public_html/index.html, provvedere! Un testo come questo e' piu' che sufficiente:

<HTML>
<BODY>
Home page di Tizio
</BODY>
</HTML>

Ricordare che questo file deve appartenere a Tizio e abbia i permessi giusti. Eventualmente, se si lavora da root, dare i comandi:

# cd /home/tizio/public_html
# chown tizio:users index.html
# chmod u=rw,g=,x=r index.html

Questi permessi sono i minimi necessari per consentire ad Apache di leggere il file, e all'utente Tizio per poterlo modificare.

In una situazione realistica avremo che i domini www.tizio.casa e www.caio.casa saranno registrati su un qualche DNS (e non nel nostro file /etc/hosts), e l'indirizzo IP da assegnare ai VirtualHost sara' l'indirizzo pubblico assegnato alla nostra macchina (e non l'indirizzo di loopback 127.0.0.1).


Umberto Salsi
Commenti
Contatto
Mappa
Home / Indice sezione
Still no comments to this page. Use the Comments link above to add your contribute.