Vedo molti sul web riferendosi all'uso di ProxyPreserveHost On
per assicurarsi che un back-end proxy riceve il nome host del chiamante originale. Sto usando questo per rafforzare la sicurezza della mia applicazione web (Java, Tomcat), mentre sarebbe anche bello se i miei registri mostrassero dove sono effettivamente gli utenti. I miei log Tomcat mostrano ora questo – abbastanza inutile:ProxyPreserveHost sembra fare poco per me
127.0.0.1 - - [17/Mar/2013:06:32:13 +0100] "GET /webapp/frontend/app/partials/welcome.html HTTP/1.1" 200 54
Questa è la mia configurazione che non chiaramente funziona come previsto:
"/ etc/apache2/sites-enabled/000-default"
<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass /webapp http://localhost:8080/webapp
ProxyPassReverse /webapp http://localhost:8080/webapp
RewriteEngine On
RewriteRule ^/$ /webapp/frontend/app/ [proxy]
RewriteRule ^/webapp/$ /webapp/frontend/app/ [redirect]
RewriteRule ^/webapp/app/$ /webapp/frontend/app/ [redirect]
(da qui in roba di default che era in 000-default
)
moduli abilitati:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod rewrite
Questo è Ubuntu 12.10 che esegue Apache HTTPD 2.2.22.
Il vostro aiuto sarebbe molto apprezzato.
Grazie. La domanda a cui fai riferimento ha una risposta votata che rimanda a un articolo al di fuori di Stack Overflow che in realtà si riferisce a 'ProxyPreserveHost' come una soluzione" quindi lo sviluppatore non deve finire usando l'intestazione 'X-Forwarded-For'" . Sono uno sviluppatore del genere, e mi sono sentito male dovendo usare qualcosa di non standard. Detto questo, ho cercato su google "X-Forwarded-For" e anche Wikipedia si riferisce ad esso come standard _de facto, che è molto meglio di quello che inizialmente pensavo fosse (qualcosa di specifico di Apache HTTPD che rende la mia applicazione Web specifica per Apache HTTPD) . –
Penso che il blog post collegato sia scritto in modo confuso. Dice che la direttiva può essere utilizzata per preservare "l'host remoto non l'ip remoto". In circostanze normali, questi sarebbero due nomi diversi (tramite DNS) per la stessa cosa, ma penso che "l'host remoto" in realtà significhi "l'intestazione host inviata dal client remoto" piuttosto che il nome host del client remoto. Ma in effetti, come scritto, è piuttosto confuso. – rra
Sono andato avanti e implementato un controllo sul valore restituito di 'HttpServletRequest.getHeader (" X-Forwarded-For ")' in aggiunta al mio controllo esistente su 'WebAuthenticationDetails.getRemoteAddress()'. La mia applicazione è ora consapevole di 'X-Forwarded-For'. Non è quello che speravo inizialmente, ma comunque lavorando. Grazie. –