Avanti Indietro Indice

8. Web virtuale

8.1 Usando virtuald

Non raccomandabile

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:

Inetd

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

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

Configurazione

Si configuri poi ogni singola istanza del server Apache come si farebbe usandolo per un singolo dominio.

Httpd.init

Non è necessario un file httpd.init, dato che il programma server viene eseguito attraverso inetd.

8.2 Usando Apache VirtualHost

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.

Access.conf

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>

Httpd.conf

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

Srm.conf

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.

Httpd.init

Non si devono apportate modifiche particolari al file httpd.init. Si può usare quello standard, compreso nella configurazione di Apache.

8.3 Overflow dei descrittori di file

Attenzione!

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.

Server Apache multipli

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.

8.4 Server che condividono un unico IP

Risparmiare indirizzi IP

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.

Inconveniente!

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.

8.5 Maggiori informazioni

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.


Avanti Indietro Indice