프록시의 개념
- 클라이언트와 서버 사이에 위치하여 그들 사이의 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를 구현해야하는데 대부분 구현안했다는게 함정)
'개발' 카테고리의 다른 글
[Vue.js] vuex 상태관리 사용법 (0) | 2020.11.21 |
---|---|
[웹기초] HTTP 메시지 정의, 흐름, 구성 (0) | 2020.09.19 |
VMWare 및 Centos8 ISO 다운로드 (0) | 2020.09.10 |
git 수정후 되돌리기 (commit전, commit 후, push 후) (0) | 2020.03.06 |
Docker를 사용하기 위해 알아야하는 인프라와 네트워크에 관한 기초 지식 (1) | 2018.12.18 |