본문 바로가기

개발

[웹기초] 프록시를 알아보자

프록시의 개념

 - 클라이언트와 서버 사이에 위치하여 그들 사이의 HTTP 메시지를 정리하는 중개인. 
 - 클라이언트 입장에서 프록시는 서버고 서버입장에서 프록시는 클라이언트(직접 구현한다면 두 기능 모두 구현해야함) 

 

게이트웨이와 프록시의 차이 

 - 프록시는 같은 프로토콜끼리의 통신을 중개하지만 게이트웨이는 다른 프로토콜 사이의 통신을 중개하는 프로토콜 변환기 처럼 동작. 
게이트웨이 예시) 메일 이트웨이 : 브라우저(HTTP)에서 이메일 서버(POP)에게 요청을 보낸다. 

 

프록시를 설치하면 어떤 이점이 있을까? 

  - 보안성을 높임. 
  - 공통 필터 적용 : ex : 성인 콘텐츠 차단 
  - 접근 제어 관리 : 각기 다른 조직에서 관리되는 수많은 종류의 웹서버들에 대한 접근을 커스터마이징 할 수 있다 
  - 웹캐시 : 자주 요청되는 문서를 프록시서버 로컬에 저장후 사본을 통해 캐싱해준다. 
  - 대리/리버스 프록시 : 대리프록시는 웹서버인것처럼 위장한다. 클라이언트에게 자신이 웹서버인것처럼 직접 요청을 받은뒤,  해당 요청을 처리할 적절한 실제 서버를 찾기위해 다른 서버와 통신한후 넘겨준다. 
  - 트랜스코더 : 콘텐츠를 클라이언트에게 전달하기 전에 입맛에 맞게 데이터의 표현방식(포맷)을 변경 할 수 있다. (ex: 용량을 줄이기위해 프록시서버에서 gif 이미지의 포맷을 jpg로 변경.) 
  - 콘텐츠 라우터 : 트래픽 조건과 콘텐츠 종류에 따라 요청을 가장 최적의 웹서버로 유도하는 라우팅기능을 제공. (ex : 프록시 서버가 콘텐츠요청을 물리적으로 가장 가까이 있는 캐시서버를 찾아내어 라우팅.) 
  - 익명화 프록시 : HTTP 메시지에서 신원을 식별할 수 있는 특성(클라이언트의 IP, From헤더, Referer헤더, 쿠키, URI 세션ID등..)을 제거함으로써 개인정보 보호와 익명성 보장에 기여. 

 

 

프록시서버는 어디에 배치할까? : 어떻게 사용할지에 따라 자유롭게 배치할 수 있다. 


(a)출구(Egress) 프록시 : 클라이언트의 로컬 네트워크상에 배치. (ex : 부적절한 콘텐츠를 브라우징하는것을 막는 필터링 출구 프록시) 
(b)접근(입구) 프록시 : ISP(인터넷 서비스 공급업체) 접근 지점에 배치. (ex : 캐시 프록시) 
(c)대리(리버스)프록시 : 네트워크의 가장끝 서버의 로컬네트워크상에 배치. (웹서버로 향하는 모든 요청을 먼저 받은뒤 필요할때만 웹서버에게 전달) 
(d)네트워크 교환 프록시 

클라이언트의 트래픽이 프록시로 가도록 만드는 방법 

1) 클라이언트 수정 : 몇몇 브라우저 및 웹 클라이언트는 수동혹은 자동 프록시 설정을 지원함. 
2) 네트워크 수정 : 트래픽을 프록시로 보내는 스위칭 장치와 라우팅 장치가 필요. 이것을 인터셉트 프록시라고 부름. 
3) DNS 이름공간 수정 : 웹서버 앞에 위치한 대리(리버스) 프록시가 웹서버의 이름과 IP주소를 자신이 직접사용한다. 
4) 웹서버 수정 : 서버가 받은뒤 프록시 서버로 리다이렉트 시킴. 
일단 전체적인 맥락을 알아두고 해당 기법들이 필요할 시점에 자세히 공부하자. 

 

HTTP 메시지를 추적하는 방법 

 - Via 헤더 : 메시지가 어떤 프록시들을 경유했는지에 대한 정보를 담고있다. 
 - TRACE 메서드 : 요청 메시지를 프록시의 연쇄를 따라가면서 어떤 프록시를 지나가고 어떻게 각 프록시가 요청 메시지를 수정하는지 관찰/추적할 수 있도록 해준다. TRACE는 프록시 흐름을 디버깅하는데 매우 유용하다.(다만 그 시스템에서 TRACE를 구현해야하는데 대부분 구현안했다는게 함정)