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.
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) . –
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
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. –