Configurazione web server Apache: virtual host

Transcript

Configurazione web server Apache: virtual host
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
Sommario
-
Introduzione
Impostare dei virtual host basati sul nome
Impostazione di un virtual host come sito predefinito
Impostazione di virtual host basati su indirizzo ip
Impostazione di sito di default per virtual host basati su indirizzo ip
Usare contemporaneamente virtual host basati su indirizzo ip e basati su nomi
Mass Virtual Hosting con l'estensione mod_vhost_alias
Mass Virtual Hosting usando le funzioni di Rewrite
SSL e vhost basati sui nomi
Logging per ogni Virtual Host
Divisione di un Log file
Host virtuali basati su porte
Mostrare lo stesso contenuto su diversi indirizzi
Introduzione
Un sistema di server web Apache supporta più siti web.
Nel file di configurazione di Apache, oltre al nome "principale" si possono definire molteplici host
virtuali (a volte chiamati "vhost" o "virtualhost") usando la direttiva . A seconda del nome
utilizzato per accedere a server web, Apache risponde adeguatamente, per esempio io potrei
cercare di accedere al sito mio1.sito.com e allo stesso modo al mio2.sito.com, entrambi gestiti
dal web server ma riconosciuti come differenti dall'esterno (vedi articolo Cosa sono i virtual host
).
Se si desidera disporre di un unico sistema di supportare più siti web, è necessario configurare
opportunamente Apache.
Ci sono due diversi tipi di host virtuale supportati da Apache.
- Il primo tipo, chiamato a base di indirizzo o basati su IP, è legato all'indirizzo di rete
numerico utilizzato per raggiungere il sistema.
- L'altro tipo di host virtuale è basato sul nome, perché la risposta del server dipende dalla
stringa che rappresenta l'indirizzo che si vuole raggiungere quello che è chiamato.
Proprio come più persone possono condividere un unico numero di telefono, siti web multipli
1 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
possono condividere lo stesso indirizzo IP. Tuttavia, tutti gli indirizzi IP condivisi da più host virtuali devono essere dichiarati con una
direttiva NameVirtualHost. La configurazione di un server Apache2 solitamente è strutturata in modo da non avere un
unico file di configurazione, ma le varie aree funzionali vengono delegate a file separati; per
esempio il file port.conf conterrà le direttive Listen con la quale si specifica su quali porte e su
quali indirizzi il server deve rimanere in ascolto:
Listen *:80
<IfModule mod_ssl.c>
Listen *:443
</IfModule> Così facendo diciamo al server si rimanere in ascolto sulla porta 80 su su qualsiasi IP e sulla
porta 443 solo se il modulo ssl è abilitato.
Il file apache2.conf conterrà tutte le direttive generali ovvero indipendenti dai virtualhost e avrà
anche il compito di richiamare gli altri file di configurazione.
I vari virtualhost sebbene possano essere specificati all'interno di un unico file, di norma sono
separati in file di configurazione diversi. Essi sono localizzati nella directory sites-available e
quando diventano attivi verrà creato un link ad essi nella directory sites-enabled
.
Per fare questo è possibile creare il link simbolico manualmente:
ln -s /etc/apache2/sites-available/miosito.com.conf /etc/apache2/sites-enabled/miosito.com.
conf
Oppure usando il comando a2ensite:
a2ensite miosito.com.conf
con un comando simile è possibile disabilitare il sito web, eliminano il suo virtualhost dalla
directory dei siti abilitati, con il comandoa2dissite:
a2ensite miosito.com.conf
Ci sono due forme primarie di host virtuali:
2 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
- basato su IP host virtuali, in cui ogni host virtuale dispone di un proprio indirizzo IP
univoco
- basato sul nome host virtuali, dove più di un host virtuale viene eseguito sullo stesso
indirizzo IP ma con nomi diversi.
Impostare dei virtual host basati sul nome
Problema
Se abbiamo a disposizione solo un indirizzo ip ma abbiamo la necessità di usare più web server
Soluzione
Usare la direttiva NameVirtualHost * insieme con :
NameVirtualHost *
<VirtualHost *>
ServerName sito1.net
DocumentRoot "varwwwsito1"
</VirtualHost>
<VirtualHost *>
ServerName sito2.net
DocumentRoot "varwwwsito2"
</VirtualHost> Spiegazione
Con il sempre minor numero di IP a disposizione l'hosting virtuale basato sul nome è il metodo
più comune per eseguire più siti web sulla stesso server Apache. "*" nel codice precedente significa che il web server deve funzionare su tutti gli indirizzi, ovvero
su tutte le interfacce di rete presenti sulla computer. Per una macchina con un unico indirizzo,
ciò significa che il server sarà in ascolto sia su questo indirizzo sia sull'indirizzo di loopback,
conosciuto meglio come localhost. Quindi, se avete accesso al server del sistema fisico, è
possibile visualizzare il sito web digitanto ad esempio "127.0.0.1". L'argomento per la direttiva virtualhost è lo stesso di quello della direttiva NameVirtualHost. La direttiva NameVirtualHost deve essere usata solo una volta e non ripetuta per i vari
virtualhost, dato che, nonostante vi siano più file di configurazione, la configurazione di Apache
è come se fosse un unico file, quindi è sufficiente dichiararla una sola volta.
Le richieste per le quali non vi è un host virtuale di cui andrà al primo host virtuale elencati nel
file di configurazione. Nel caso del precedente esempio, apache permette di navigare nel sito
web http://sito1.net usando i file nella directory /var/www/sito1, mentre se digitassimo http://sito2
.net
vedremo i file nella directory /var/www/sito2
.
3 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
Utilizzando la direttiva ServerAlias più nomi possono essere usati per riferirsi ad un determinato
virtual host. Ad esempio:
NameVirtualHost * <VirtualHost *>
DocumentRoot "varwwwsito1"
</VirtualHost>
ServerName www.sito1.net
ServerAlias sito1.net
permette di richiamare il sito web http://www.sito1.com anche usando l'indirzzo http://sito1.com.
Al posto del simbolo * nelle direttive NameVirtualHost e Virtualhost avremo potuto specificare
l'indirizzo l'indirizzo IP, tipo
NameVirtualHost 192.168.1.15
<VirtualHost 192.168.1.15>
... Oppure specificando la porta:
NameVirtualHost 192.168.1.15:80
<VirtualHost 192.168.1.15:80>
... L'importante è che ci sia coerenza tra le due direttive, altrimenti potrebbero aver luogo errori
imprevedibili, quindi se si dichiara la porta nel NameVirtualHost, la si dovrà dichiarare anche in
tutti virtualhost.
Dichiarare la porta è molto importante nel caso si voglia abilitare il supporto ssl e quindi attivare
il server anche sulla porta 443, questo modo si limita l'uso dei virtualhost basati sul nome alla
porta 80:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName sito1.miodominio.com DocumentRoot /var/www/sito1 </Virtualhost>
<VirtualHost *:443> DocumentRoot /var/www/sito1 ServerName sito1.miodominio.com
<Directory /var/www/sito1>
allow from all
Options +Indexes </Directory> SSLEngine
on SSLCertificateFile /etc/ssl/certs/sito1.miodominio.com.crt SSLCertificateKeyFile
/etc/ssl/private/sito1.miodominio.com.key SSLVerifyClient none
</VirtualHost>
Ora se usiamo https://sito1.miodominio.com oppure http://sito1.miodominio.com useremo il file
4 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
nella directory
/var/www/sito1
, solo che nel primo caso useremo il protocollo ssl e la porta 443.
Questo andrebbe bene se ci fosse un solo vitualhost, ma se ne avessimo un altro, ad esempio
http://sito2.miodominio.com che punta a /var/www/sito2 , beh in questo caso avremo un
problema, perché ssl si basa sull'IP dell'host e funziona male con i virtualhost (
vedi
). Infatti se usassimo l'url
https
://sito2.miodominio.com
verremo rimandati alla directory
/var/www/sito1
.
Nella dichiarazione relativa ai vari virtualhost sarà necessario inserire delle direttive Rewrite in
modo da gestire i vari casi:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName sito1.miodominio.com
<VirtualHost *:80>
ServerName sito2.miodominio.com
</VirtualHost>
DocumentRoot /var/www/sito1 </Virtualhost>
DocumentRoot /var/www/sito2
NameVirtualHost *:443 <VirtualHost *:443> DocumentRoot /var/www/sito1 ServerName
sito1.miodominio.com <Directory /var/www/sito1>
allow from all
Options +Indexes
</Directory> SSLEngine on SSLCertificateFile /etc/ssl/certs/sito1.miodominio.com.crt
SSLCertificateKeyFile /etc/ssl/private/sito1.miodominio.com.key SSLVerifyClient none
</VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/sito2 ServerName
sito2.miodominio.com:443 SSLEngine off RewriteEngine On RewriteCond
%{REQUEST_PORT} !^443$ RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>
Le richieste sulla porta 443 verranno gestite con il protocollo ssl se il server richiesto è il sito1.mi
odominio.com
, mentre verranno gestite normalmente quelle relative al server
sito2.miodominio.com
.
Se poi volessimo che il sito1 lavorasse esclusivamente in https e il sito2 esclusivamente in http,
allora alla configurazione del
sito1
5 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
sulla porta 80 dovremo aggiungere una regola di Rewrite simile a quella inserita per il
sito 2
sulla 443:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName sito1.miodominio.com DocumentRoot /var/www/sito1 RewriteEngine On
RewriteCond %{HTTPS} !=on RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]
</Virtualhost>
<VirtualHost *:80>
ServerName sito2.miodominio.com DocumentRoot /var/www/sito2
</VirtualHost>
NameVirtualHost *:443 <VirtualHost *:443> DocumentRoot /var/www/sito1 ServerName
sito1.miodominio.com <Directory /var/www/sito1>
allow from all
Options +Indexes
</Directory> SSLEngine on SSLCertificateFile /etc/ssl/certs/sito1.miodominio.com.crt
SSLCertificateKeyFile /etc/ssl/private/sito1.miodominio.com.key SSLVerifyClient none
</VirtualHost> <VirtualHost *:443> DocumentRoot /var/www/sito2 ServerName
sito2.miodominio.com:443 SSLEngine off RewriteEngine On RewriteCond
%{REQUEST_PORT} !^443$ RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>
E 'importante capire che aggiungere degli host virtuali al file di configurazione non è sufficiente
ad aggiornare il server DNS. Infatti se un utente digitasse nel proprio browser la nuova stringa
descritta nella direttiva apache non gli comparirebbe nessun sito, dato che a quella stringa non
è associato ancora l'ip del vostro server.
È necessario quindi aggiungere un altro record nel server DNS in modo che i nuovi nomi siano
legati l'indirizzo IP del server di sistema che ospita Apache. Per ulteriori informazioni su come configurare il server DNS, consultare la documentazione per
il software DNS , o chiedere al provider di servizi Internet dove avete registrato il vostro
dominio.
Impostazione di un virtual host come sito predefinito
Problema
Vogliamo che tutte le richieste, che non soddisfano i criteri di nessun altro virtual host, vengano
dirette verso un host virtuale predefinito, possibilmente mostrante un messaggio d'errore "sito
non trovato".
Soluzione
aggiungere la seguente sezione prima di tutti gli altri:
6 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
<VirtualHost *>
ServerName default DocumentRoot /www/htdocs
ErrorDocument 404 /lista_siti.html
</VirtualHost>
Spiegazione
Questa soluzione è usata in un contesto name-based virtual hosts, per cui si è dato per
scontato che vi siano anche altre sezioni in cui sono definiti dei virtual host con la notazione
<VirtualHost *>.
E' stato usato il nome "default" per maggior chiarezza, ma avremmo potuto chiamarlo in
qualsiasi altro modo.
Impostando come documento di errore "404" un elenco dei siti disponibili sul server si è data
una risposta migliore che una semplice pagina d'errore, che non avrebbe aiutato di certo
l'utente.
Sarebbe meglio esplicitare sempre tutti i validi ServerNames o ServerAliases, così che nessuno
vada a finire nel sito di default. Se qualcuno accedesse al web server direttamente tramite indirizzo IP, o se questo fosse
impostato correttamente in un virtual host, sarebbe meglio dare un informazione utile all'utente.
Impostazione di virtual host basati su indirizzo ip
Problema
Abbiamo più indirizzi a disposizione e vogliamo che ad ognuno corrisponda un sito web diverso.
Soluzione
Creare una sezione virtual host per ogni indirizzo IP:
ServerName 127.0.0.1
<VirtualHost 10.0.0.1>
ServerName sito1.net
DocumentRoot "C:/Apache/Sites/sito1"
</VirtualHost>
<VirtualHost 10.0.0.2>
ServerName sito2.net
DocumentRoot "C:/Apache/Sites/sito2"
</VirtualHost> Spiegazione
I virtual host definiti qui sopra catturano tutte le richieste per gli indirizzi specificati, che poi
vengono smistate e dirette ai rispettivi web server presenti nelle due diverse directory.
Il ServerName specificato è usato come virtual host primario, ma non è usato per lo
smistamento delle richieste verso l'host corretto.
7 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
Impostazione di sito di default per virtual host basati su indirizzo ip
Problema
Abbiamo bisogno di creare un sito di default dove indirizzare tutte le richieste che arrivano al
web server che non soddisfano nessuno degli indirizzi elencati tra gli host virtuali.
Soluzione
Usare la parola chiave "_default_" per indicare il default host:
<VirtualHost _default_>
DocumentRoot /www/htdocs
</VirtualHost> Spiegazione
La parola chiave _default_ crea un host virtuale che cattura tutte le richieste per qualsiasi
combinazioni indirizzo:porta che non compaiono tra quelli presenti nella configurazione di
apache.
La parola chiave _default_ può essere usata insieme ad una particolare porta, come ad
esempio:
<VirtualHost _default_:443>
Usando questa sintassi si indicano tutti i virtual host che usano la porta 443 ma che non sono
elencati nei virtual host.
Usare contemporaneamente virtual host basati su indirizzo ip e basati su
nomi
Problema
Abbiamo più indirizzi IP a disposizione e su ognuno vogliamo che ci sia più di un sito web.
Soluzione
Usare una direttiva NameVirtualHost per ogni IP e procedere come se avessimo un solo
indirizzo IP:
ServerName 127.0.0.1 NameVirtualHost 10.0.0.1 NameVirtualHost 10.0.0.2 <VirtualHost
10.0.0.1> ServerName sito1.net DocumentRoot "C:/Apache/Sites/sito1" </VirtualHost>
<VirtualHost 10.0.0.1> ServerName sito2.net DocumentRoot "C:/Apache/Sites/sito2"
</VirtualHost> <VirtualHost 10.0.0.2> ServerName sito3.net DocumentRoot
"C:/Apache/Sites/sito3" </VirtualHost> <VirtualHost 10.0.0.2> ServerName sito4.net
DocumentRoot "C:/Apache/Sites/sito4" </VirtualHost>
8 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
Spiegazione
Specificando l'indirizzo ip piuttosto che usando il "*" facciamo in modo che il server ascolti su un
particolare indirizzo. quindi prima dichiariamo l'IP come nome(NameVirtualHost) e poi
proseguiamo con la sua descrizione (
).
Mass Virtual Hosting con l'estensione mod_vhost_alias
Problema
Vogliamo molti virtual host, tutti con la stessa configurazione.
Soluzione
Usare le variabili VirtualDocumentRoot e VirtualScriptAlias forniti dal modulo "mod_vhost_alias":
VirtualDocumentRoot /www/vhosts/%-1/%-2.1/%-2/htdocs
VirtualScriptAlias /www/vhosts/%-1/%-2.1/%-2/cgi-bin
Spiegazione
Questa soluzione utilizza le direttive fornite dal modulo mod_vhost_alias , che di default non
dovrebbe essere attivo, quindi prima di usare queste variabili è bene attivarlo.
Queste direttive mappano le richieste su delle directory costruite usando la stessa parte
dell'hostname presente nella richiesta. Ogni variabile rappresenta una parte del nome dell'host,
così chè a un differente nome del sito corrisponde una differente directory.
In questo particolare esempio una richiesta per il sito www.example.com è indirizzata verso una
directory
/www/vhosts/c
om/e/example/htdocs
, o verso /www/vhosts/com/e/example/cgi-bin
(per le richieste di tipo CGI). tutte le variabili disponibili sono mostrate nella Tabella 1.
Tabella 1 - Variabili mod_vhost_alias
Variabile
Significato
%%
inserisce un %
%p
inserisce una particolare porta nel virtual host
%M.N
inserisce una parte del nome
M e N possono avere un valore numerico intero positivo o negativo, che ha il seguente
significato:
Tabella 2 - Significato dei valori delle variabili
0
1
-1
Valore
Significato
L'intero nome
La prima parte del nome
L'ultima parte del nome
9 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
2
-2
2+
-2+
La seconda parte del nome
La penultima parte del nome
Dalla seconda parte in poi del nome
Dalla penultima parte in poi
Quando il valore è messo come prima parte dell'argomento, cioè nella parte M di %M.N, questo
si riferisce alle parti dell'hostname divise dai punti. Quando invece è messa come secondo
argomento allora si riferisce alle lettere di quella singola parte. Per esempio, se come nome del
sito abbiamo www.example.com, il significato delle variabili sarà:
Tabella 3 - Esempi.
%0
%1
%2
%3
%-1
%-2
%-3
%-2.1
%-2.2
%-2.3+
Variabile
www.example.com
www
example
com
com
example
www
e
x
ample
Significato
Quindi in relazione al numero di vhost, verranno create un uguale numero di cartelle ordinate
alfabeticamente, grazie al nome del dominio.
Mass Virtual Hosting usando le funzioni di Rewrite
Problema
Sebbene ci sia un modulo (mod_vhost_alias) che serve proprio a gestire un vasto numero di
virtual host, questo è un po limitato, dato che fa in modo che tutti i vhost siano configurati alla
stessa maniera. Noi invece vogliamo gestire molti vhost ma configurati dinamicamente evitando
d'usare il modulo mod_vhost_alias.
Soluzione
Usare le direttive fornite dal modulo mod_rewrite per mappare le richieste in base al nome su
delle specifiche cartelle:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).com$
RewriteRule ^(.*)$ /home/%2$1
10 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
Spiegazione
Il modulo mod_vhost_alias è molto utile, ma non consente una gestione dinamica dei singoli
vhost, e ci preclude la possibilità di utilizzare altri moduli , come ad esempio mod_userdir,
mod_rewrite, and mod_alias, che appartengono sempre alla categoria URL-mapping modules, il
che è mlto restrittivo.
Usando il modulo mod_rewrite si ha una efficienza minore, ma una flessibilità maggiore.
Per esempio, alcuni vhost potrebbero essere gestiti in maniera tradizionale mentre altri gestiti
con le funzioni di riscrittura (rewrite).
Nella soluzione precedente per esempio indirizza le richieste con hostname www.something.co
m
(o senza il www)
verso la cartella
/h
ome/something
.
Per maggiori informazioni
http://httpd.apache.org/docs/vhosts/
http://httpd.apache.org/docs/mod/mod_rewrite.html
SSL e vhost basati sui nomi
Problema
Vogliamo avere più siti web SSL sullo stesso server.
Soluzione
Nelle più comuni implementazioni dell' SSL, siamo limitati ad un solo sito SSL per indirizzo e
numero di porta. Così, per ciascun sito avremo bisogno di un indirizzo IP o sullo stesso IP usare
due porte differenti:
Listen 443
Listen 444
<VirtualHost 10.0.1.2:443>
ServerName secure1.example.com
DocumentRoot /www/vhosts/secure1
SSLEngine On
SSLCertificateFile /www/conf/ssl/secure1.crt
SSLCertificateKeyFile /www/conf/ssl/secure1.key
</VirtualHost>
<VirtualHost 10.0.1.3:443>
ServerName secure2.example.com
DocumentRoot /www/vhosts/secure2
SSLEngineOn
SSLCertificateFile /www/conf/ssl/secure2.crt
11 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
SSLCertificateKeyFile /www/conf/ssl/secure2.key
</VirtualHost>
<VirtualHost 10.0.1.3:444>
ServerName secure3.example.com
DocumentRoot /www/vhosts/secure3
SSLEngineOn
SSLCertificateFile /www/conf/ssl/secure3.crt
SSLCertificateKeyFile /www/conf/ssl/secure3.key
</VirtualHost>
Spiegazione
La limitazione che impone la restrizione ad avere un singolo host SSL per ogni IP non è imposta
da Apache ma è implicita nel modo di funzionare dell'SSL.
Quando un browser si connette al server, la prima cosa che fa è negoziare con esso per una
connessione sicura. durante questo processo, il server manda un certificato al client, che serve
per la successiva criptazione dello scambio di dati. Affinché questo accada questa parte della
transazione può essere basata solo sull'indirizzo IP del client che si è connesso, solo in seguito
quest'ultimo farà la richiesta per una particolare risorsa sul web server.
Quando il server riceve l' "header field" dell'host, il certificato è già stato mandato...quindi è
troppo tardi.
E' possibile avere più server SSL in ascolto su porte diverse dalla 443, se la porta è
esplicitamente richiesta nell' URL. questo potrebbe consentire l'aggiramento del problema, ma
costringerebbe l'utente finale a scrivere la porta corretta durante la navigazione.
Logging per ogni Virtual Host
Problema
Vogliamo che ogni host virtuale abbia il suo file di log.
Soluzione
Specificare Errorlog e CustomLog all'interno della dichiarazione dell'host virtuale:
<VirtualHost *>
ServerName mio1.sito.net
DocumentRoot /home/sito/mio1/htdocs
ErrorLog /home/sito/mio1/logs/error_log
CustomLog /home/sito/mio1/logs/access_log combined
</VirtualHost>
Spiegazione
Le direttive per il log possono essere richiamate sia nella configurazione generale del sito che
all'interno della dichiarazione dell'host virtuale . Quando stanno dentro queste ultime i log relativi
a quello specifico vhost saranno registrati dentro i file impostati.
12 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
Considerando la configurazione del server, bisogna considerare il numero massimo di
connessioni previste, infatti
se abbiamo 100 virtual host e ognuno col suo file di log (sia accessi che errori) questo implica
che stiamo usando 200 canali aperti, se la quota sul server è di 256 questo vuol dire che
rimangono solo 56 che si occuperanno del resto. In pratica ci rimangono solo 56 connessioni
che possono essere gestite contemporaneamente dal server.
Nella soluzione proposta i log vanno a finire su dei file che stanno su alcune cartelle, ed è bene
assicurarsi che si abbiano i corretti permessi di scrittura su di esse.
Divisione di un Log file
Problema
Dato l'elevato numero di vhost, vogliamo che ci sia un unico file di log, ma tale da poterlo
dividere in seguito. Soluzione
LogFormat "%v %h %l %u %t "%r" %>s %b" vhost
CustomLog logs/vhost_log vhost
Quindi dopo la rotazione del file:
split-logfile < logs/vhost_log
Spiegazione
La direttiva LogFormat in questa soluzione crea un logfile che è simile ad un comune file di log
ma con l'informazione in più del nome del vhost che lo ha originato. La funzione split-logfile
divide il file di log a seconda dei vari host virtuali.
Host virtuali basati su porte
Problema
Vogliamo un diverso contenuto per le connessioni HTTP su porte differenti.
Soluzione
Impostiamo esplicitamente il numero della porta nella dichiarazione :
13 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
Listen 8080
<VirtualHost 10.0.1.2:8080>
DocumentRoot /www/vhosts/port8080
</VirtualHost>
Listen 9090
<VirtualHost 10.0.1.2:9090>
DocumentRoot /www/vhosts/port9090
<VirtualHost>
Spiegazione
Il virtual hosting Port-based è molto simile agli altri tipi di tecniche mostrate in precedenza e ci
potrebbero essere una serie di situazioni in cui questa modalità di virtualizzare potrebbe essere
utile.
Se infatti avessimo un solo indirizzo IP e nessuna possibilità di aggiungere dei domini nei server
DNS, o se il nostro ISP bloccasse il traffico in ingresso sulla porta 80, ecco che potrebbe essere
utile avere uno o più web server su delle porte alternative
Gli utenti del sito in questione dovrebbero però aggiungere il numero della porta al normale
hostname, riprendendo l'esempio precedente dovrebbero scrivere:
http://server.example.com:9090/ Mostrare lo stesso contenuto su diversi indirizzi
Problema
Vogliamo che lo stesso contenuto compaia su due dei notri indirizzi a disposizione.
Soluzione
Impostiamo esplicitamente i due IP nella dichiarazione :
NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40
<VirtualHost 192.168.1.1 172.20.30.40>
DocumentRoot /www/vhosts/server
ServerName server.example.com
ServerAlias server
</VirtualHost>
Spiegazione
In questo caso accedendo al web server direttamente con gli indirizzi IP si viene indirizzati allo
stesso sito. Naturalmente questo ha senso se ci sono anche altri indirizzi che sono riservati ad
altri contenuti, perché se si volesse impostare lo stesso sito per tutti gli indirizzi si fa prima ad
usare l'asterisco (*) che significa "tutti"
14 / 15
Configurazione web server Apache: virtual host
Scritto da Administrator
Martedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56
15 / 15