Quando lavoriamo su un progetto web è normale provare l'applicazione in locale prima di portarla sul server remoto. Il vantaggio di questo approccio è la riduzione dei tempi di sviluppo e collaudo: ogni modifica effettuata in locale può essere verificata immediatamente, senza dover eseguire l'upload delle risorse via FTP, e senza utilizzare qualche strumento di amministrazione dei files remoti (ad esempio un editor di risorse via browser). Lo svantaggio, o meglio il rischio, è di avere delle sorprese al momento del rilascio. L'ambiente di run-time remoto non è quasi mai uguale a quello locale, ed è piuttosto probabile che una stessa applicazione, che gira perfettamente in locale, si comporti diversamente in remoto.

Un modo di ridurre il problema è quello di creare un ambiente di lavoro locale il più possibile simile a quello remoto. Una delle prime operazioni in questa direzione è la consistenza degli indirizzi locali rispetto a quelli remoti. Molto spesso capita di lavorare in locale su un indirizzo come

http://localhost/prova.com/

e di volerlo farlo funzionare in remoto come

http://prova.com/

Una situazione di questo tipo rappresenta un possibile problema: se la nostra applicazione utilizza una riscrittura dinamica degli indirizzi (rewrite di Apache), o semplicemente gestisce le pagine in base alla posizione rispetto alla root del server, una discrepanza come quella qui sopra potrebbe creare dei fastidi al momento del deploy in remoto. Una buona soluzione, per tutti i problemi di questo tipo, è la configurazione di un Virtual Host in locale.

Abbiamo già visto come configurare un Virtual Host nel caso di Apache2 (su Linux). Oggi vedremo come compiere la stessa operazione su Windows, facendo riferimento all'installazione di Apache tramite il pacchetto XAMPP.

Configurazione dell'host virtuale

Il primo passo è la creazione del Virtual Host in Apache. Cerchiamo il file httpd-vhosts.conf, che dovrebbe trovarsi all'interno della cartella

<Installazione di XAMPP>\apache\conf\extra

e facciamone una copia di backup per sicurezza (chiamandola ad esempio httpd-vhosts.original.conf). Dopodiché apriamo il file con un editor qualsiasi (su Windows consigliamo Notepad++) e scommentiamo la riga

# Use name-based virtual hosting.

NameVirtualHost *:80

in questo modo abilitiamo il riconoscimento degli host virtuali in base al nome presente nell'URL, ovvero in base al nome del dominio (in questo caso virtuale). Alla fine del file inseriamo invece le righe

<VirtualHost *:80>

ServerName localhost

DocumentRoot "C:\Apps\xampp\htdocs"

</VirtualHost>

<VirtualHost *:80>

ServerName prova.com

DocumentRoot "C:\Apps\xampp\htdocs\prova"

<Directory "C:\Apps\xampp\htdocs\prova">

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

cambiando ovviamente i riferimenti alla directory prova. La prima sezione dice ad Apache di continuare a lavorare come prima quando scriviamo http://localhost nel browser: se omettiamo questa sezione non vedremo più le pagine deployate nella cartella htdocs. La seconda sezione è quella che ci interessa, e serve ad associare l'host virtuale prova.com alla cartella locale C:\Apps\xampp\htdocs\prova (o l'equivalente percorso locale).

Configurazione del file host

La modifica vista sopra è sufficiente per creare un host virtuale, in questo caso prova.com. Rimane però una cosa da fare: se non abbiamo registrato il dominio prova.com, il browser non sarà capace di raggiungere l'Apache locale. Viceversa, se abbiamo già registrato prova.com, molto probabilmente digitando http://prova.com finiremo (giustamente) sul server remoto e non sull'istanza locale.

Il modo più semplice di costringere la nostra macchina (e solo lei) a raggiungere l'Apache locale usando lo stesso URL di produzione è tramite il file hosts, che su Windows dovrebbe trovarsi qui

C:\WINDOWS\system32\drivers\etc\hosts

apriamo il file con i permessi di amministratore e inseriamo la riga

127.0.0.1 prova.com

L'istruzione dirà a Windows che qualunque richiesta verso l'host prova.com va risolta sull'indirizzo IP 127.0.0.1, ovvero quello della nostra macchina locale.

Questo è tutto. Dopo aver riavviato Apache, ogni volta che scriveremo http://prova.com vedremo le pagine dell'Apache locale, e potremo navigare con gli stessi indirizzi della versione remota del sito (o applicazione). Ricordiamoci che la modifica nel file hosts ci impedirà di raggiungere il sito remoto (quello “reale”): per vedere di nuovo le pagine del sito remoto basta commentare la riga inserita nel file hosts, senza toccare (né riavviare) Apache. Il file hosts riguarda il comportamento del sistema operativo, non gli applicativi installati sulla macchina (come ad esempio Apache).

Se qualcosa va storto, o non funziona, verifichiamo che nel file httpd.conf non sia commentata l'istruzione

Include "conf/extra/httpd-vhosts.conf"

altrimenti Apache non degnerà di interesse le modifiche nel file httpd-vhosts.conf.