Configurazione web server Apache: virtual host

15
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

Transcript of Configurazione web server Apache: virtual host

Page 1: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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 hostvirtuali (a volte chiamati "vhost" o "virtualhost") usando la direttiva  . A seconda del nomeutilizzato per accedere a server web, Apache risponde adeguatamente, per esempio io potreicercare di accedere al sito mio1.sito.com e allo stesso modo al mio2.sito.com, entrambi gestitidal 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 configurareopportunamente 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 retenumerico utilizzato per raggiungere il sistema. - L'altro tipo di host virtuale è basato sul nome, perché la risposta del server dipende dallastringa 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

Page 2: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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 unadirettiva NameVirtualHost. La configurazione di un server Apache2 solitamente è strutturata in modo da non avere ununico file di configurazione, ma le varie aree funzionali vengono delegate a file separati; peresempio il file port.conf conterrà le direttive Listen con la quale si specifica su quali porte e suquali 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 sullaporta 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 sonoseparati in file di configurazione diversi. Essi sono localizzati nella directory sites-available equando 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 dalladirectory dei siti abilitati, con il comandoa2dissite:

a2ensite miosito.com.conf

Ci sono due forme primarie di host virtuali:

2 / 15

Page 3: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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 IPunivoco - basato sul nome host virtuali, dove più di un host virtuale viene eseguito sullo stessoindirizzo IP ma con nomi diversi.

Impostare dei virtual host basati sul nome

ProblemaSe abbiamo a disposizione solo un indirizzo ip ma abbiamo la necessità di usare più web server

SoluzioneUsare la direttiva NameVirtualHost * insieme con :

NameVirtualHost *<VirtualHost *> ServerName sito1.net DocumentRoot "varwwwsito1"</VirtualHost>

<VirtualHost *> ServerName sito2.net DocumentRoot "varwwwsito2"</VirtualHost> 

SpiegazioneCon il sempre minor numero di IP a disposizione l'hosting virtuale basato sul nome è il metodopiù comune per eseguire più siti web sulla stesso server Apache. "*" nel codice precedente significa che il web server deve funzionare su tutti gli indirizzi, ovverosu 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 varivirtualhost, 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 nelfile di configurazione. Nel caso del precedente esempio, apache permette di navigare nel sitoweb http://sito1.net usando i file nella directory /var/www/sito1, mentre se digitassimo http://sito2.netvedremo i file nella directory /var/www/sito2.

3 / 15

Page 4: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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 determinatovirtual host. Ad esempio:

NameVirtualHost * <VirtualHost *> ServerName www.sito1.net ServerAlias sito1.net DocumentRoot "varwwwsito1"</VirtualHost>

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 specificarel'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 erroriimprevedibili, quindi se si dichiara la porta nel NameVirtualHost, la si dovrà dichiarare anche intutti virtualhost.

Dichiarare la porta è molto importante nel caso si voglia abilitare il supporto ssl e quindi attivareil server anche sulla porta 443, questo modo si limita l'uso dei virtualhost basati sul nome allaporta 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> SSLEngineon 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

Page 5: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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 esempiohttp://sito2.miodominio.com che punta a /var/www/sito2 , beh in questo caso avremo unproblema, perché ssl si basa sull'IP dell'host e funziona male con i virtualhost (vedi). Infatti se usassimo l'url https://sito2.miodominio.comverremo rimandati alla directory /var/www/sito1.

Nella dichiarazione relativa ai vari virtualhost sarà necessario inserire delle direttive Rewrite inmodo da gestire i vari casi:

NameVirtualHost *:80<VirtualHost *:80> ServerName sito1.miodominio.com DocumentRoot /var/www/sito1 </Virtualhost><VirtualHost *:80> ServerName sito2.miodominio.com DocumentRoot /var/www/sito2 </VirtualHost>

NameVirtualHost *:443 <VirtualHost *:443> DocumentRoot /var/www/sito1 ServerNamesito1.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 ServerNamesito2.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.miodominio.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

Page 6: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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 2sulla 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 ServerNamesito1.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 ServerNamesito2.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 è sufficientead aggiornare il server DNS. Infatti se un utente digitasse nel proprio browser la nuova stringadescritta 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 sianolegati l'indirizzo IP del server di sistema che ospita Apache. Per ulteriori informazioni su come configurare il server DNS, consultare la documentazione peril software DNS , o chiedere al provider di servizi Internet dove avete registrato il vostrodominio.

Impostazione di un virtual host come sito predefinito

ProblemaVogliamo che tutte le richieste, che non soddisfano i criteri di nessun altro virtual host, venganodirette verso un host  virtuale predefinito, possibilmente mostrante un messaggio d'errore "sitonon trovato".

Soluzioneaggiungere la seguente sezione prima di tutti gli altri:

6 / 15

Page 7: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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>

SpiegazioneQuesta soluzione è usata in un contesto name-based virtual hosts, per cui si è dato perscontato 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 inqualsiasi altro modo.Impostando come documento di errore "404" un elenco dei siti disponibili sul server si è datauna risposta migliore che una semplice pagina d'errore, che non avrebbe aiutato di certol'utente.Sarebbe meglio esplicitare sempre tutti i validi ServerNames o ServerAliases, così che nessunovada a finire nel sito di default. Se qualcuno accedesse al web server direttamente tramite indirizzo IP, o se questo fosseimpostato correttamente in un virtual host, sarebbe meglio dare un informazione utile all'utente.

Impostazione di virtual host basati su indirizzo ip

ProblemaAbbiamo più indirizzi a disposizione e vogliamo che ad ognuno corrisponda un sito web diverso.

SoluzioneCreare 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> 

SpiegazioneI virtual host definiti qui sopra catturano tutte le richieste per gli indirizzi specificati, che poivengono smistate e dirette ai  rispettivi web server presenti nelle due diverse directory.Il ServerName specificato è usato come virtual host primario, ma non è usato per losmistamento delle richieste verso l'host corretto.

7 / 15

Page 8: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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

ProblemaAbbiamo bisogno di creare un sito di default dove indirizzare tutte le richieste che arrivano alweb server che non soddisfano nessuno degli indirizzi elencati tra gli host virtuali.

SoluzioneUsare la parola chiave "_default_" per indicare il default host:

<VirtualHost _default_> DocumentRoot /www/htdocs</VirtualHost> 

SpiegazioneLa parola chiave _default_ crea un host virtuale che cattura tutte le richieste per qualsiasicombinazioni indirizzo:porta  che non compaiono tra quelli presenti nella configurazione diapache.La parola chiave _default_  può essere usata insieme ad una particolare porta, come adesempio:

<VirtualHost _default_:443>

Usando questa sintassi si indicano tutti i virtual host che usano la porta 443 ma che non sonoelencati nei virtual host.

Usare contemporaneamente virtual host basati su indirizzo ip e basati sunomi

ProblemaAbbiamo più indirizzi IP a disposizione e su ognuno vogliamo che ci sia più di un sito web.

SoluzioneUsare una direttiva NameVirtualHost per ogni IP e procedere come se avessimo un soloindirizzo IP:

ServerName 127.0.0.1 NameVirtualHost 10.0.0.1 NameVirtualHost 10.0.0.2 <VirtualHost10.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

Page 9: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56

SpiegazioneSpecificando l'indirizzo ip piuttosto che usando il "*" facciamo in modo che il server ascolti su unparticolare indirizzo. quindi prima dichiariamo l'IP come nome(NameVirtualHost) e poiproseguiamo con la sua descrizione ().

Mass Virtual Hosting con l'estensione mod_vhost_alias

ProblemaVogliamo molti virtual host, tutti con la stessa configurazione.

SoluzioneUsare le variabili VirtualDocumentRoot e VirtualScriptAlias forniti dal modulo "mod_vhost_alias":

VirtualDocumentRoot /www/vhosts/%-1/%-2.1/%-2/htdocsVirtualScriptAlias /www/vhosts/%-1/%-2.1/%-2/cgi-bin

SpiegazioneQuesta soluzione utilizza le direttive fornite dal modulo mod_vhost_alias , che di default nondovrebbe essere attivo, quindi prima di usare queste variabili è bene attivarlo.Queste direttive mappano le richieste su delle directory costruite usando la stessa partedell'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 unadirectory /www/vhosts/com/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 seguentesignificato:

Tabella 2 - Significato dei valori delle variabili Valore Significato 0 L'intero nome 1 La prima parte del nome -1 L'ultima parte del nome

9 / 15

Page 10: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56

2 La seconda parte del nome -2 La penultima parte del nome 2+ Dalla seconda parte in poi del nome -2+ Dalla penultima parte in poi

Quando il valore è messo come prima parte dell'argomento, cioè nella parte M di %M.N, questosi riferisce alle parti dell'hostname divise dai punti. Quando invece è messa come secondoargomento allora si riferisce alle lettere di quella singola parte. Per esempio, se come nome delsito abbiamo www.example.com, il significato delle variabili sarà:

Tabella 3 - Esempi. Variabile Significato %0 www.example.com %1 www %2 example %3 com %-1 com %-2 example %-3 www %-2.1 e %-2.2 x %-2.3+ ample

Quindi in relazione al numero di vhost, verranno create un uguale numero di cartelle ordinatealfabeticamente, grazie al nome del dominio.

Mass Virtual Hosting usando le funzioni di Rewrite

ProblemaSebbene ci sia un modulo (mod_vhost_alias) che serve proprio a gestire un vasto numero divirtual host, questo è un po limitato, dato che fa in modo che tutti i vhost siano configurati allastessa maniera. Noi invece vogliamo gestire molti vhost ma configurati dinamicamente evitandod'usare il modulo mod_vhost_alias.

SoluzioneUsare le direttive fornite dal modulo mod_rewrite per mappare le richieste in base al nome sudelle specifiche cartelle:

RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.)?([^.]+).com$RewriteRule ^(.*)$ /home/%2$1

10 / 15

Page 11: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56

SpiegazioneIl modulo mod_vhost_alias è molto utile, ma non consente una gestione dinamica dei singolivhost, 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, ilche è 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 gestiticon le funzioni di riscrittura (rewrite).Nella soluzione precedente per esempio indirizza le richieste con hostname www.something.com (o senza il www)verso la cartella /home/something.

Per maggiori informazionihttp://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.

SoluzioneNelle più comuni implementazioni dell' SSL, siamo limitati ad un solo sito SSL per indirizzo enumero di porta. Così, per ciascun sito avremo bisogno di un indirizzo IP o sullo stesso IP usaredue porte differenti:

Listen 443Listen 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

Page 12: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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>

SpiegazioneLa limitazione che impone la restrizione ad avere un singolo host SSL per ogni IP non è impostada 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 unaconnessione sicura. durante questo processo, il server manda un certificato al client, che serveper la successiva criptazione dello scambio di dati. Affinché questo accada questa parte dellatransazione può essere basata solo sull'indirizzo IP del client che si è connesso, solo in seguitoquest'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, macostringerebbe l'utente finale a scrivere la porta corretta  durante la navigazione.

Logging per ogni Virtual Host

ProblemaVogliamo che ogni host virtuale abbia il suo file di log.

SoluzioneSpecificare 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>

SpiegazioneLe direttive per il log possono essere richiamate sia nella configurazione generale del sito cheall'interno della dichiarazione dell'host virtuale . Quando stanno dentro queste ultime i log relativia quello specifico vhost  saranno registrati dentro i file impostati.

12 / 15

Page 13: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56

Considerando la configurazione del server, bisogna considerare il numero massimo diconnessioni previste, infattise abbiamo 100 virtual host e ognuno col suo file di log (sia accessi che errori) questo implicache stiamo usando 200 canali aperti, se la quota sul server è di 256 questo vuol dire cherimangono solo 56 che si occuperanno del resto. In pratica ci rimangono solo 56 connessioniche possono essere gestite contemporaneamente dal server.

Nella soluzione proposta i log vanno a finire su dei file che stanno su alcune cartelle, ed è beneassicurarsi che si abbiano i corretti permessi di scrittura su di esse.

Divisione di un Log file

ProblemaDato l'elevato numero di vhost, vogliamo che ci sia un unico file di log, ma tale da poterlodividere in seguito. 

Soluzione

LogFormat "%v %h %l %u %t "%r" %>s %b" vhostCustomLog logs/vhost_log vhost

Quindi dopo la rotazione del file:

split-logfile < logs/vhost_log

SpiegazioneLa direttiva LogFormat in questa soluzione crea un logfile che è simile ad un comune file di logma con l'informazione in più del nome del vhost che lo ha originato. La funzione split-logfiledivide il file di log a seconda dei vari host virtuali.

Host virtuali basati su porte

ProblemaVogliamo un diverso contenuto per le connessioni HTTP su porte differenti.

SoluzioneImpostiamo esplicitamente il numero della porta nella dichiarazione :

13 / 15

Page 14: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 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>

SpiegazioneIl virtual hosting Port-based è molto simile agli altri tipi di tecniche mostrate in precedenza e cipotrebbero essere una serie di situazioni in cui questa modalità di virtualizzare potrebbe essereutile.Se infatti avessimo un solo indirizzo IP e nessuna possibilità di aggiungere dei domini nei serverDNS, o se il nostro ISP bloccasse il traffico in ingresso sulla porta 80, ecco che potrebbe essereutile avere uno o più web server su delle porte alternativeGli utenti del sito in questione dovrebbero però aggiungere il numero della porta al normalehostname, riprendendo l'esempio precedente dovrebbero scrivere:

http://server.example.com:9090/ Mostrare lo stesso contenuto su diversi indirizzi

ProblemaVogliamo che lo stesso contenuto compaia su due dei notri indirizzi a disposizione.

SoluzioneImpostiamo esplicitamente i due IP nella dichiarazione :

NameVirtualHost 192.168.1.1NameVirtualHost 172.20.30.40

<VirtualHost 192.168.1.1 172.20.30.40> DocumentRoot /www/vhosts/server ServerName server.example.com ServerAlias server</VirtualHost>

SpiegazioneIn questo caso accedendo al web server direttamente con gli indirizzi IP si viene indirizzati allostesso sito. Naturalmente questo ha senso se ci sono anche altri indirizzi che sono riservati adaltri contenuti, perché se si volesse  impostare lo stesso sito per tutti gli indirizzi si fa prima adusare l'asterisco (*) che significa "tutti"

14 / 15

Page 15: Configurazione web server Apache: virtual host

Configurazione web server Apache: virtual host

Scritto da AdministratorMartedì 21 Ottobre 2008 08:47 - Ultimo aggiornamento Lunedì 03 Ottobre 2011 09:56

15 / 15