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
.