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