sabato 28 marzo 2009

Virtual Hosting

Il Virtual Hosting (o Shared IP Hosting) è la tecnica che permette di avere più siti web (domini) in esecuzione su una singolo web server fisico, con un unico indirizzo IP statico a disposizione. Nel virtual hosting basato sui nomi di dominio (name-based), esiste una relazione biunivoca tra host-name  (dominio) e virtual server, e le richieste in arrivo al server fisico vengono instradate opportunamente ad un particolare virtual server, in base all'host name definito nell'URL di richiesta. L' URL di richiesta è l'URL usato da uno User-Agent per richiedere ad un server una risorsa; in genere un web server può risopndere a richieste con URL di richiesta differenti (e tipicamente si tiene traccia di tali URL nel file di log delle richieste). Le seguenti due richieste hanno URL request differente, anche se la risposta sarà probabilmente la stessa:



Consideriamo la seguente tabella di mapping delle richieste in arrivo all'IP 127.0.0.1:


Protocollo
Dominio
Porta
Virtual Server
http
localhost
80
server
http
localhost181
server1


In un contesto JEE, disponendo per esempio di un server Glassfish, sarà sufficiente inserire nel file <glassfish-domain-path>/config/domain.xml quanto segue:

...
<http-listener id="http-listener-80" port"80">
<http-listener id="http-listener-81" port"81">
...
<virtual-server id="server" hosts="localhost" http-listeners="http-listener-80">
<virtual-server id="server1" hosts="localhost1" http-listeners="http-listener-81">
...

Tramite la console di amministrazione di Glassfish è facimente possibile creare nuovi http-listener





e virtual server:




Data la configurazione della tabella precedente, per una richiesta "http://localhost1" il server restituisce HTTP-CODE=404(risorsa non trovata), perchè tutte le richieste http in arrivo sulla porta 80(quella di default per le richieste http) vengono intercettate da http-listener-80 e non esiste un binding tra questo http-listener e il virtual server server1, che serve tutte e solo le richieste le cui URL request sono del tipo "http://localhost1:81/...".

Su un computer locale è possibile sperimentare tale situazione.
In ambiente Windows il file <WINDOWS_PATH>\system32\drivers\etc\hosts, che ha funzioni molto simili a quelle del DNS, opportunamente configurato permette di instradare tutte le richieste di tipo "<PROTOCOLLO>://localhost" e "<PROTOCOLLO>://localhost1" sull'host il cui IP è 127.0.0.1, cioè il computer locale:







in genere la riga "127.0.0.1    localhost" viene inserita di default in fase di installazione del S.O., quindi per il nostro esempio è sufficiente inserire la riga evidenziata in giallo.

In fase di deploy di un applicazione web (o enterprise) tramite la console di amministrazione è possibile specificare su quale virtual server debba essere deployata un'applicazione:




In altrenativa è possibile usare il comando asadmin deploy con l opzione --virtualservers, come riportato nella documentazione ufficiale. Per chi usa ambienti di sviluppo integrato è possibile effettuare il deploy direttamente su un particolare virtual server. Per esempio, usando Netbeans IDE e sfruttando le potenzialità di ANT, è possibile modificare il file <project-home>/nbproject/ant-deploy.xml inserendo un attributo nella tag <sun-appserv-deploy>:




Settando in maniera opportuna le proprietà di un virtual server è possibile, tra l'altro, impedire l'accesso a tale virtual server (e quindi a tutte le applicazioni in esecuzione su di esso) alle richieste provenienti da particolari indirizzi IP,  attraverso le proprietà denyRemoteAddress e allowRemoteAddress.

Ulteriori dettagli sull'utilizzo dei virtual server in ambiente JEE:
http://docs.sun.com/app/docs/doc/820-4507/abhfg?a=view
http://blogs.sun.com/jluehe/entry/virtual_hosting_features_in_glassfish




Nessun commento: