2013-03-17 12 views
9

widzę wiele w internecie odnoszące się do stosowania ProxyPreserveHost On, aby upewnić się, że serwer proxy backend otrzymuje nazwę hosta oryginalnego rozmówcy. Używam tego do zaostrzenia zabezpieczeń mojej aplikacji WWW (Java, Tomcat), ale byłoby miło, gdyby moje dzienniki pokazywały, gdzie faktycznie są użytkownicy. Moje dzienniki Tomcat pokazują teraz tego – bezużyteczny:ProxyPreserveHost wydaje się zrobić trochę mi

127.0.0.1 - - [17/Mar/2013:06:32:13 +0100] "GET /webapp/frontend/app/partials/welcome.html HTTP/1.1" 200 54 

To jest moja konfiguracja, która nie jasno działa zgodnie z oczekiwaniami:

"/ 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] 

(stąd na domyślnym rzeczy, która była w 000-default)

Włączone moduły:

sudo a2enmod proxy 
sudo a2enmod proxy_http 
sudo a2enmod rewrite 

to Ubuntu 12.10 Apache HTTPD 2.2.22.

Twoja pomoc byłaby bardzo cenna.

Odpowiedz

10

Zakładam, że martwisz się, że Twój dziennik dostępu nadal zawiera 127.0.0.1 w polu klienta. Nie ma to wpływu na ProxyPreserveHost; jest to adres IP punktu końcowego sieci, który jest połączony z Apache. W przypadku serwerów proxy z innego serwera będzie to zawsze localhost.

Ponadto, ProxyPreserveHost dotyczy zachowania nagłówka Host wysłanego przez klienta, a nie zachowania oryginalnego adresu IP klienta. Innymi słowy, chodzi o informacje idące w niewłaściwym kierunku do twoich celów; zachowuje nazwę serwera wysłaną przez klienta, a nie adres IP klienta.

myślę, że pytanie jest taka sama jak this question. Dodałbym dodatkową notatkę, że możesz logować nagłówek X-Forwarded-For w logach, używając %{X-Forwarded-For}i w konfiguracji .

+0

Dzięki. Pytanie, na które się powołujesz, ma głosowaną odpowiedź, która łączy się z artykułem spoza Stack Overflow, który w rzeczywistości oznacza "ProxyPreserveHost" jako jedno rozwiązanie ", więc deweloper nie musi kończyć się używaniem nagłówka" X-Forwarded-For "" . Jestem takim programistą i czułem się źle przy użyciu czegoś niestandardowego. Powiedziałem, że szukałem w Google 'X-Forwarded-For', a nawet Wikipedia nazywa go" standardem de facto ", co jest znacznie lepsze niż początkowo sądziłem (coś specyficznego dla Apache HTTPD, które czyni moją aplikację internetową Apache specyficzną dla HTTPD) . –

+0

Myślę, że połączony blog jest po prostu myląco napisany. Mówi, że dyrektywa może być używana do zachowania "zdalnego hosta, a nie zdalnego IP." W normalnych okolicznościach byłyby to dwie różne nazwy (za pośrednictwem DNS) dla tego samego, ale myślę, że przez "zdalnego hosta" on faktycznie oznacza "nagłówek hosta wysłany przez klienta zdalnego", a nie nazwę hosta zdalnego klienta. Ale tak naprawdę, jak napisano, jest to dość mylące. – rra

+0

Poszedłem dalej i zaimplementowałem sprawdzanie zwracanej wartości 'HttpServletRequest.getHeader (" X-Forwarded-For ")' oprócz mojego obecnego sprawdzenia 'WebAuthenticationDetails.getRemoteAddress()'. Moja aplikacja jest więc teraz świadoma "X-Forwarded-For". Nie to, na co miałem nadzieję początkowo, ale mimo to działa. Dziękuję Ci. –

Powiązane problemy