Sysctl Copertina Indice |
Articoli
Una rete virtuale su un solo computer!
PremessaQuesto articolo nasce dalla mia esperienza di Web Designer. Attualmente curo pagine che sono ospitate su tre siti:
Sulla mia Linux Box di casa si presentava quindi il problema di simulare l'esistenza di tre hosts; più precisamente bisognava risolvere i problemi seguenti:
In altre parole, SI VUOLE CREARE UNA SITUAZIONE IN CUI È POSSIBILE ACCEDERE, VIRTUALMENTE, A DIVERSI SITI INTERNET SUI QUALI DOBBIAMO LAVORARE. Virtualmente perchè in realtà tutto avviene sul nostro computer di casa e vogliamo che il server web ed il mailer daemon si comportino in un certo modo quando vengono invocati. Vedremo punto per punto come risolvere tutti questi problemi. Poichè sulla mia linux box è installata una distribuzione Debian 1.2.0, queste note si riferiranno a quella distribuzione, ma credo non sia difficile adattarle anche ad altre distribuzioni come RedHat, Slackware o Caldera. Il materiale occorrente è dunque una distribuzione Debian 1.2.x con il server Apache installato.
Dare più di un nome al nostro computer
Ovvero: come far venire una crisi d'identità al proprio
computer e vivere felici!
Nella directory /etc troviamo il file hosts. Se questo file non è mai stato manipolato dal momento dell'installazione esso conterrà solo una linea con una struttura del tipo:
127.0.0.1 nome.completo.host localhost nome
ad esempio, sul mio PC è
127.0.0.1 spark.bronto.it localhost spark
Il significato di questa linea è semplice: associa ai nomi "spark.bronto.it", "localhost" e "spark" il primo nome della serie (quindi spark.bronto.it) e il numero IP 127.0.0.1 (loopback).
La prima cosa che si potrebbe fare è ribattezzare il computer come "www.bronto.it" per quando si accede alle pagine web, ma siccome sono modesto e so benissimo che oltre casa mia le pagine non le leggerà nessuno, il nome sarà hww (Home Wide Web): aggiungo la linea
127.0.0.1 hww.bronto.it hww
A questo punto avrete capito che per far riconoscere gli altri nomi alla macchina basterà aggiungere una serie di linee di questo tipo:
127.0.0.1 tex.unica.it tex 127.0.0.1 a730.unica.it airo.unica.it a730 airo 127.0.0.1 gulch.unica.it gulch
Il primo passo è fatto.
Ricevere la posta diretta ad altri host
Ora sorge un secondo problema: quando la distribuzione viene installata il sendmail viene configurato solo per il nome di host che viene dato in fase di installazione. Per fare in modo che oltre agli indirizzi del tipo utente@spark.bronto.it gestisca anche utente@tex.unica.it (ad esempio) bisogna riconfigurare tutto da capo?
Tranquillizzatevi, la risposta è no. Andiamo a cercare un altro file: /etc/mail/sendmail.cw, che all'installazione è completamente vuoto. Con una forte semplificazione possiamo dire che questo file deve contenere i nomi con i quali sendmail riconosce la nostra macchina (oltre al nome dato in installazione). Quindi per far riconoscere anche al sendmail tutti i nomi che abbiamo appena dato al nostro PC bisogna inserire nel file una serie di entrate, come queste:
tex.unica.it a730.unica.it airo.unica.it gulch.unica.it
Configurare apache per diversi siti virtuali
Risolto anche il problema della posta, bisogna configurare Apache per ospitare le copie dei dati presenti sui diversi server. Cosa fare?
Cominciamo dalla fase più semplice: creiamo le directory che ospiteranno i files relativi ai vari siti virtuali. Sul mio Linux Box la directory che contiene le sottodirectory delle cgi, delle icone, dei documenti etc. (cioè la directory indicata come "ServerRoot" nella configurazione di Apache) è
/usr/local/etc/httpd
La directory che contiene i documenti html è
/usr/local/etc/httpd/htdocs
Ho creato a questo livello una sottodirectory per ogni host (quindi una sottodirectory a730, una gulch, una tex), all'interno della quale riprodurre tutto o una parte della directory "ServerRoot" di ciascun host. Tuttavia è bene notare che la cosa migliore sarebbe creare una sottodirectory virtual direttamente nella ServerRoot, p.e. /usr/local/etc/httpd/virtual e creare lì una sottodirectory per ogni host. In questo modo i documenti degli altri host non sarebbero accessibili utilizzando un URL del tipo
http://hww.bronto.it/a730/htdocs/index.html
Ed ora, finalmente, i dettagli sulla configurazione di Apache: apriamo il file /etc/apache/httpd.conf. Alla fine del file c'è una piccola "maschera" che già suggerisce come fare:
# VirtualHost: Allows the daemon to respond to requests for more than one # server address, if your server machine is configured to accept IP packets # for multiple addresses. This can be accomplished with the ifconfig # alias flag, or through kernel patches like VIF. # Any httpd.conf or srm.conf directive may go into a VirtualHost command. # See alto the BindAddress entry. # <VirtualHost host.foo.com> # ServerAdmin webmaster@spark.bronto.it # DocumentRoot /www/docs/host.foo.com # ServerName host.foo.com # ErrorLog logs/host.foo.com-error_log # TransferLog logs/host.foo.com-access_log # </VirtualHost>
È intuitivo come procedere ora: per i più pigri è sufficiente copiare le linee di esempio e editarle, ma è bene ricordare, come dice il testo commentato, che "qualunque direttiva accettabile in httpd.conf o srm.conf può essere inserita all'interno di un comando VirtualHost". Così per i casi più semplici basta aggiungere qualcosa del genere:
<VirtualHost airo.unica.it> ServerAdmin webmaster@spark.bronto.it DocumentRoot /usr/local/etc/httpd/htdocs/a730/htdocs ScriptAlias /cgi-bin /usr/local/etc/httpd/htdocs/a730/cgi-bin ServerName airo.unica.it ErrorLog /var/log/apache/airo.error TransferLog /var/log/apache/airo.access </VirtualHost>
Vediamo, uno per uno, il significato di ciascuna direttiva:
Per prima cosa, sotto la directory utente pubblica per i documenti html (per default ~/public_html nell'installazione Debian di Apache) bisogna creare due sottodirectory per i due virtual hosts, per esempio ~/public_html/try e ~/public_html/why, ed una "di default", per il server non virtuale, per esempio ~/public_html/main. Dopodichè nella configurazione del server e del virtual host andranno inserite (o modificate) le direttive UserDir.
Un esempio è la configurazione del virtual host tex.unica.it sulla mia linux box:
<VirtualHost tex.unica.it> ServerAdmin webmaster@spark.bronto.it DocumentRoot /usr/local/etc/httpd/htdocs/tex/htdocs UserDir public_html/tex ScriptAlias /cgi-bin /usr/local/etc/httpd/htdocs/tex/cgi-bin ServerName tex.unica.it ErrorLog /var/log/apache/tex.error TransferLog /var/log/apache/tex.access </VirtualHost>
Noterete che è presente anche una direttiva ScriptAlias. Quindi quando una CGI verrà richiesta all'host hww.bronto.it, Apache andrà a cercare in /usr/local/etc/httpd/cgi-bin, mentre se verrà richiesta all'host tex.unica.it, Apache andrà a cercare in /usr/local/etc/httpd/htdocs/tex/cgi-bin
Una configurazione ancora più complessa è la seguente:
<VirtualHost gulch.unica.it> ServerAdmin webmaster@spark.bronto.it DocumentRoot /usr/local/etc/httpd/htdocs/gulch/htdocs UserDir public_html/gulch ScriptAlias /cgi-bin /usr/local/etc/httpd/htdocs/gulch/cgi-bin Alias /icons/ /usr/local/etc/httpd/htdocs/gulch/icons/ ServerName gulch.unica.it ErrorLog /var/log/apache/gulch.error TransferLog /var/log/apache/gulch.access <Directory /usr/local/etc/httpd/htdocs/gulch/htdocs> Options ExecCGI FollowSymLinks </Directory> </VirtualHost>
l'intepretazione della quale lascio per esercizio al lettore!-)
Conclusione
Apache si dimostra uno strumento molto potente anche quando se ne conoscono solo alcune potenzialità. Vale la pena di "prenderci la mano" e di studiarlo a fondo. Un libro che promette molto bene a chi vuol fare conoscenza con questo potente free software è "Apache - The definitive guide" edito da O'Reilly & Associates, che ho ordinato proprio oggi. Una piccola recensione sul libro sarà argomento di uno dei miei prossimi articoli.
Note:
Si ringraziano Davide Rizzo e
Stefano Sanna per il loro aiuto
alla realizzazione dell'articolo.
1) In realtà le cose sono ben
diverse. Al server a730.unica.it, quello vero, è
stato dato come alias il nome airo.unica.it, dovendo servire le pagine della
locale Sezione dell'A.I.R.O.. Senza la direttiva "ServerName airo.unica.it" le
richieste del tipo http://airo.unica.it/documento.html
riceverebbero in risposta
http://a730.unica.it/documento.html
, che sarebbe
l'indirizzo visualizzato da Netscape sulla barra "Location:". Per evitare
questo, e far quindi in modo che il server risponda sempre come airo.unica.it,
si usa la direttiva ServerName. Quanto detto sopra vale solamente per il caso
in esame, ovvero di diversi virtual host in un computer stand-alone.
Sysctl Copertina Indice |