http://www.lesstif.com/pages/viewpage.action?pageId=21430345
아파치 웹서버(apache web server) 에는 mod_proxy 라는 프록시 기능을 하는 모듈이 내장되어 있고 이 모듈은 forward proxy 와 reverse proxy 두 가지 기능을 다 수행한다.
그러면 forward 와 reverse 방식의 차이점은 무엇일까.
아래 그림을 보면 쉽게 이해할 수 있을 것이다.
Forward Proxy
클라이언트가 example.com 에 연결하려고 하면 사용자 PC 가 직접 연결하는게 아니라 포워드 프록시 서버가 요청을 받아서 example.com 에 연결하여 그 결과를 클라이언트에 전달(forward) 해 준다.
포워드 프록시는 대개 캐슁 기능이 있으므로 자주 사용되는 컨텐츠라면 월등한 성능 향상을 가져올 수 있으며 사용자의 정해진 사이트만 연결할수 있는등 웹 사용 환경을 제한할수 있으므로 기업 환경등에서 많이 사용한다.
Reverse Proxy
클라이언트가 example.com 웹 서비스에 데이타를 요청하면 Reverse Proxy는 이 요청을 받아서 내부 서버에서 데이타를 받은후에 이 데이타를 클라이언트에 전달하게 된다.
내부 서버가 직접 서비스를 제공해도 되지만 이렇게 구성하는 이유는 보안때문이다.
보통 기업의 네트워크 환경은 DMZ 라고 하는 내부 네트워크와 외부 네트워크 사이에 위치하는 구간이 존재하며 이 구간에는 메일 서버, 웹 서버, FTP 서버등 외부 서비스를 제공하는 서버가 위치하게 된다.
example.com 사는 서비스를 자바로 구현해서 WAS 를 DMZ 에 놓고 서비스해도 되지만 WAS 는 보통 DB 서버와 연결되므로 WAS 가 최전방에 있으면 WAS 가 털릴 경우 DB 서버까지 같이 털리는 심각한 문제가 발생할 수 있다.
이때문에 리버스 프락시 서버를 두고 실제 서비스 서버는 내부망에 위치시키고 프락시 서버만 내부에 있는 서비스 서버와 통신해서 결과를 클라이언트에게 제공하는 방식으로 서비스를 하게 된다.
특히 리눅스 환경이라면 리버스 프락시로 아파치 웹 서버를 사용한다면 SELinux 를 켜 놓으면 SELinux 의 기본 정책이 웹 서버는 톰캣의 8080, 8009 포트만 접근 할 수 있으므로 아파치 웹 서버가 해킹당해도 웹 서버 권한으로는 내부망으로 연결이 불가하다.
Reverse Proxy 로 서비스 제공시 WAS 에서 REMOTE_ADDR 을 가져오면 Reverse Proxy 서버의 IP 를 얻게 되므로 원하는 결과가 나오지 않는다.
Proxy(프락시) 환경에서 client IP 를 얻기 위한 X-Forwarded-For(XFF) http header 를 참고해서 XFF 헤더를 사용하자.
'web' 카테고리의 다른 글
Using CORS (0) | 2015.10.08 |
---|---|
cors ie & ff 브라우져 레벨 설정. (0) | 2015.10.08 |
CORS Same Origin Policy 우회. (0) | 2015.10.08 |
Date Format ( slice -2 ) (0) | 2015.04.07 |
정규표현식 정리. (0) | 2014.12.10 |
댓글