Apache ha un supporto interno per i domini virtuali. È il solo programma di cui raccomando di usare le funzionalità interne per la gestione dei domini virtuali. Ogniqualvolta si lancia qualcosa attraverso inetd c'è un prezzo da pagare: il programma deve ripartire da zero ogni volta che ne viene richiesta l'esecuzione. Questo causa un rallentamento nel tempi di risposta, che è accettabile per la gran parte dei servizi, ma inaccettabile per quello web. Apache ha anche un meccanismo per impedire connessioni quando ce ne siano troppe in entrata, che potrebbe essere un fattore critico anche per siti con un volume di traffico medio.
Detto in poche parole, rendere virtuale Apache con virtuald è una pessima idea. Virtuald trova la sua ragion d'essere nel colmare le lacune di servizi che non hanno la capacità di gestire in proprio i domini virtuali. Virtuald non è pensato per rimpiazzare del codice di buona qualità che sia in grado di svolgere da sé questo compito.
Per coloro che sono abbastanza sconsiderati da farlo comunque, malgrado quanto detto sopra, ecco come fare:
Modificare /etc/inetd.conf
vi /etc/inetd.conf # Aggiungi questa linea www stream tcp nowait www /usr/local/bin/virtuald \ virtuald /virtual/conf.www httpd -f /var/www/conf/httpd.conf
Modificare /var/www/conf/httpd.conf
vi /var/www/conf/httpd.conf # O dovunque si trovino i file di configurazione Dovrebbe esserci: ServerType standalone Rimpiazzare la riga con: ServerType inetd
Si configuri poi ogni singola istanza del server Apache come si farebbe usandolo per un singolo dominio.
Non è necessario un file httpd.init, dato che il programma server viene eseguito attraverso inetd.
Apache ha tre file di configurazione access.conf
, httpd.conf
, e srm.conf
. Le versioni recenti di Apache hanno reso non
necessari i tre file di configurazione. Comunque ho trovato che suddividere
la configurazione in tre sezioni ne semplifica la gestione, per cui
continuerò a fare così in questo HOWTO.
Questo file di configurazione è usato per controllare l'accesso alle directory della struttura del sito. Ecco una configurazione di esempio che mostra come si possano gestire opzioni differenti per ciascun dominio:
# /var/www/conf/access.conf: Configurazione di accesso globale # Le opzioni sono ereditate dalla directory genitore # Configura la directory principale con le opzioni predefinite <Directory /> AllowOverride None Options Indexes </Directory> # Fornisce a un dominio una directory protetta da password <Directory /virtual/domain1.com/var/www/html/priv> AuthUserFile /var/www/passwd/domain1.com-priv AuthGroupFile /var/www/passwd/domain1.com-priv-g AuthName PRIVSECTION AuthType Basic <Limit GET PUT POST> require valid-user </Limit> </Directory> # Permette i Server Side Include in un altro dominio <Directory /virtual/domain2.com/var/www/html> Options IncludesNOEXEC </Directory>
Questo file di configurazione è usato per gestire le opzioni principali del server Apache. Ecco una configurazione di esempio che mostra come si possano gestire opzioni differenti per ciascun dominio:
# /var/www/conf/httpd.conf: File principale di configurazione del server # Inizio: sezione principale di configurazione # La riga seguente è necessaria dato che non si sta usando inetd ServerType standalone # Porta sulla quale gira il server Port 80 # Registra nei log gli host dei client con i loro nomi piuttosto che con # gli indirizzi IP HostnameLookups on # Utente con i privilegi del quale gira il server User www Group www # Collocazione dei file di configurazione, di errore e di log ServerRoot /var/www # File in cui si trova l'identificatore di processo (Process Id) del server PidFile /var/run/httpd.pid # File di informazioni sullo stato interno del server ScoreBoardFile /var/www/logs/apache_status # Opzioni di Timeout e KeepAlive Timeout 400 KeepAlive 5 KeepAliveTimeout 15 # Limitazioni per i server in esecuzione MinSpareServers 5 MaxSpareServers 10 StartServers 5 MaxClients 150 MaxRequestsPerChild 30 # Fine: sezione principale di configurazione # Inizio: sezione host virtuale # Specifica le coppie IP:porta su cui il demone accetta connessioni # Io ho una direttiva per ogni IP necessario in modo da poter # ignorare esplicitamente certi domini Listen 10.10.10.129:80 Listen 10.10.10.130:80 # La direttiva VirtualHost permette di specificare un altro dominio # virtuale sul server. La maggior parte delle opzioni di Apache possono # essere specificate all'interno di questa sezione. <VirtualHost www.domain1.com> # Indirizzo di e-mail da contattare in caso di errori ServerAdmin webmaster@domain1.com # Collocazione dei documenti web nel dominio virtuale DocumentRoot /virtual/domain1.com/var/www/html # Nome di dominio del server ServerName www.domain1.com # File di Log relativi alla direttiva ServerRoot ErrorLog logs/domain1.com-error_log TransferLog logs/domain1.com-access_log RefererLog logs/domain1.com-referer_log AgentLog logs/domain1.com-agent_log # Usa gli script CGI in questo dominio ScriptAlias /cgi-bin/ /var/www/cgi-bin/domain1.com/ AddHandler cgi-script .cgi AddHandler cgi-script .pl </VirtualHost> <VirtualHost www.domain2.com> # Indirizzo di e-mail da contattare in caso di errori ServerAdmin webmaster@domain2.com # Collocazione delle pagine web nel dominio virtuale DocumentRoot /virtual/domain2.com/var/www/html # Nome di dominio del server ServerName www.domain2.com # File di Log relativi alla direttiva ServerRoot ErrorLog logs/domain2.com-error_log TransferLog logs/domain2.com-access_log RefererLog logs/domain2.com-referer_log AgentLog logs/domain2.com-agent_log # Niente script CGI per questo host virtuale </VirtualHost> # Fine: sezione host virtuale
Questo file di configurazione viene usato per controllare il modo in cui vengono processate le richieste e il formato dei risultati. Non ci sono modifiche particolari da apportare per i domini virtuali. Il file di configurazione di esempio dovrebbe andar bene.
Non si devono apportate modifiche particolari al file httpd.init. Si può usare quello standard, compreso nella configurazione di Apache.
Quanto si dirà si applica solo al server Apache eseguito come `standalone' (indipendente). Se il programma server viene eseguito attraverso inetd, esso non interagisce con gli altri domini, per cui ha un'intera tabella di descrittori di file per ogni dominio.
Ogni file di log che il server Apache apre significa un descrittore di file in più per il processo. C'è un limite di 256 descrittori di file per processo in Linux. Dato che si gestiscono più domini con un unico server web, si usano un mucchio di descrittori di file. Se un solo server web Apache, che è un processo singolo, supporta troppi domini, è possibile causare un overflow in questa tabella. Ciòsignificherebbe la mancata registrazione di alcuni log e l'impossibilità di eseguire script CGI.
Se si ipotizza l'uso di cinque descrittori di file per dominio, si possono gestire 50 domini su un solo server Apache senza nessun problema. Comunque, nel caso si riscontrino problemi del genere, si può creare /var/www1 con un server Apache che s'incarichi dei domini da domain1 a domain25 e /var/www2 con un server Apache che gestisca i domini dal domain26 al domain50 e così via. Così facendo ogni server avrà la propria directory di file di configurazione, di errore e di log. Ogni server dovrà essere configurato separatamente, ognuno con le proprie direttive Listen e VirtualHost. Non ci si dimentichi di lanciare più server tramite il proprio file httpd.init.
HTTP (HyperText Transfer Protocol) versione 1.1 fornisce una funzionalità per comunicare il nome di dominio del server al client. Ciò significa che il client non ha necessità di risolvere il nome del server a partire dall'indirizzo IP. Perciò due server virtuali potranno avere gli stessi indirizzi IP ed essere siti web diversi. La configurazione di Apache è la stessa di sopra eccetto che non sarà necessario inserire direttive Listen differenti, dato che i due domini avranno lo stesso IP.
Il solo problema è che virtuald usa gli indirizzi IP per distinguere
tra i vari domini. Nella sua stesura attuale, [nel caso si condividano
indirizzi IP N.d.T.] virtuald non sarebbe in grado di eseguire il
chroot
a differenti directory di spool per ogni dominio.
Perciò il servizio di posta risponderebbe solo a livello di singolo
indirizzo IP e non ci sarebbe più una singola directory di spool per
ogni dominio. Tutti i client del medesimo IP condiviso sul web dovrebbero
condividere la medesima directory di spool. Ciò significa che
duplicati di nomiutente costituerebbero nuovamente un problema [non si
potrebbero usare gli stessi nomiutente in domini virtuali diversi N.d.T.].
Comunque questo è il prezzo da pagare per condividere lo stesso
indirizzo IP.
Questo HOWTO mostra come implementare il supporto ai domini virtuali solo con il web server Apache. La maggior parte dei server web usano un'interfaccia simile. Per maggiori informazioni sul web hosting virtuale si consulti WWW HOWTO, la documentazione di Apache presso Sito web di Apache, o la documentazione presso ApacheWeek.