Oggi mi servirà rendere pubblico un server web interno, nel quale ho installato delle applicazioni particolari ed instabili che non voglio installare nel server web pubblico.
Di conseguenza ecco come modificare Apache per redirigere le richieste dal server pubblico al server privato.
ProxyPass e ProxyPassReverse saranno vostri amici.
Ecco come usarli
ProxyPass /pagina http://192.168.2.8/wiki ProxyPassReverse /pagina http://192.168.2.8/wiki
La pagina sarebbe la pagina pubblica
ed il resto dove volete farlo andare
Ma ora ho un nuovo problema. Così facendo le richieste al server interno arriveranno dall’IP del server pubblico ma, naturalmente, non voglio questo e avrei bisogno anche dell’ IP del client per usarlo in PHP.
Ma anche per questo c’é una soluzione. Visto che apache ci invia il dato nel header della richiesta basterà leggerlo ed ecco come:
– per i log personalizziamo in log inserendo la variabile del header
creiamo un LogFormat specifico, utilizando la variabile X-Forwarded-For
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" nuovo
ed usiamolo in CustomLog
CustomLog logs/access_log nuovo
– per lo script php si procede allo stesso modo.
// leggiamo, gli header di apache $headers = apache_request_headers(); // estrapoliamo ip $ip_vero = $headers["X-Forwarded-For"];