프록시 된 백엔드가 원래 호출자의 호스트 이름을 수신하는지 확인하기 위해 웹에서 ProxyPreserveHost On
의 사용과 관련하여 많은 것을 봅니다. 내 웹 응용 프로그램의 보안 (Java, Tomcat)을 강화하기 위해이 도구를 사용하고 있지만 내 로그에 사용자가 실제로있는 위치가 표시되면 좋을 것입니다. 내 톰캣 로그 지금 보여이 – 꽤 쓸모 :ProxyPreserveHost가 나를 위해 거의하지 않는 것 같습니다
127.0.0.1 - - [17/Mar/2013:06:32:13 +0100] "GET /webapp/frontend/app/partials/welcome.html HTTP/1.1" 200 54
이 예상대로 명확하게 작동하지 않는 내 구성입니다 :
"/ 등/아파치/사이트 지원/000-기본"
<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]
사용 가능 모듈 (여기 000-default
에 있던 기본 재료부터가) :
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod rewrite
이것은 Apache HTTPD 2.2.22를 실행하는 우분투 12.10입니다.
귀하의 도움을 많이 주시면 감사하겠습니다.
감사합니다. 당신이 참조하는 질문은 스택 오버 플로우 외부의 기사에 대한 링크가 실제로 "ProxyPreserveHost"를 하나의 솔루션으로 언급하는 투표 결과에 대한 답변을 갖고 있으므로 개발자는'X-Forwarded-For' 헤더를 사용하지 않아도됩니다. . 나는 그런 개발자 다. 그리고 나는 비표준 무언가를 사용해야하는 것이 나쁘다고 느꼈다. 내가'X-Forwarded-For'를봤을 때, Wikipedia조차도 그 사실을 처음에 생각했던 것보다 훨씬 나은 표준으로보고있다. (내 웹 애플리케이션을 Apache HTTPD와 관련이있는 Apache HTTPD와 관련있다.) . –
나는 링크 된 블로그 포스트가 혼란스럽게 작성되었다고 생각한다. 그는 지시문을 사용하여 "원격 호스트가 아닌 원격 호스트"를 보존 할 수 있다고 말합니다. 정상적인 상황에서는 DNS와 같은 두 가지 이름이 있지만 원격 호스트의 호스트 이름 대신 실제로 "원격 클라이언트가 보낸 호스트 헤더"를 의미한다고 생각합니다. 그러나 실제로, 서면으로 그것은 오히려 혼란 스럽습니다. – rra
나는'WebAuthenticationDetails.getRemoteAddress()'에 대한 기존 검사 외에'HttpServletRequest.getHeader ("X-Forwarded-For")'의 리턴 값에 대한 검사를 구현했다. 내 응용 프로그램은 이제'X-Forwarded-For '를 인식합니다. 그럼에도 불구하고 내가 처음에는 기대했던 것이 아니 었습니다. 고맙습니다. –