책 “HTTP 완벽 가이드”를 읽고 정리한 글입니다.
이전 글에서는 프록시의 개념과 종류에 대해 다루었다. 이번 글에서는 해당 개념에 대해 조금 더 세부적으로 다룰 것이다.
프록시(Proxy)
프록시 서버는 클라이언트를 대신하여 트랜잭션을 수행한다.
프록시는 아래 그림과 같이 클라이언트와 서버 사이에서 HTTP 요청, 응답 메시지를 적절히 다룬다.
공용 프록시 vs 개인 프록시
- 공용 프록시
- 개념
- 여러 클라이언트가 공유하는 프록시
- 특징
- 대부분의 프록시의 운영 방식
- 중앙 집중화 되어 있어 비용 효율이 높다.
- 개념
- 개인 프록시
- 개념
- 한 클라이언트가 독점적으로 사용하는 프록시
- 개념
프록시 vs 게이트웨이
- 공통점
- 둘 이상의 애플리케이션을 연결한다.
- 네트워크 통신에서 중개자 역할을 한다.
- 내부 네트워크에서 인터넷으로 트래픽을 전송한다.
- 차이점
- 프록시
- 연결되는 애플리케이션들이 동일한 프로토콜을 사용한다.
- 내부 네트워크가 외부에 노출되지 않도록 하는 벽과 같은 역할을 한다.
- 어떤 연결이 허용될 지 필터링을 한다.
- 게이트웨이
- 연결되는 애플리케이션들이 서로 다른 프로토콜을 사용한다.
- 인터넷으로 가는 문의 역할을 한다.
- 별도의 필터링 과정을 거치지 않는다.
- 프록시
프록시의 사용
프록시 서버는 모든 HTTP 트래픽을 받는다. 따라서 보안, 성능을 향상시키거나 및 기타 유용한 작업에 사용된다.
다음은 프록시가 사용되는 사례이다.
- 유해 사이트 차단
- 부적절한 사이트의 접근을 거부하는 필터링 프록시를 사용한다.
문서 접근 제어자 (Document access controller)
- 회사와 같은 조직에서는 중앙 프록시 서버를 통해 웹 서버들에 대한 접근 제어를 설정한다. 이 때, 클라이언트 별로 특정 서버에 접근할 수 있는 권한을 다르게 설정할 수 있다.
- 보안 방화벽
- 네트워크의 한 지점에서 안팎을 오가는 애플리케이션 프로토콜의 흐름을 통제하는 것
- 웹 캐시
- 자주 요청되는 문서의 사본을 저장해두었다가 요청이 들어올 때 빠르게 제공하는 것
- 대리 프록시 (Surrogate)
- 프록시는 웹 서버로 위장한 채로 요청을 받을 수 있다. 이런 프록시를 리버스 프록시라고도 부른다.
- 콘텐츠 라우터 (Content router)
- 프록시는 인터넷 트래픽 조건과 콘텐츠 종류에 따라 요청을 특정 웹 서버로 유도한다.
- 트랜스코더 (Transcoder)
- 프록시는 응답 메시지를 클라이언트에게 전달하기 전에 콘텐츠의 데이터 표현 방식을 자연스럽게 변환할 수 있다. 이 과정에서 메시지의 데이터 인코딩을 다른 인코딩으로 변환하게 된다.
- 익명 프록시 (Anonymizer)
- 프록시는 HTTP 메시지를 제거/변경하여 개인 정보를 보호하는 기능을 한다. 이 때 HTTP 메시지에서 제거 대상이 되는 정보로는 클라이언트의 IP 주소, From 헤더, Referer 헤더, 쿠키, URI 세션 아이디 등이 있다.
프록시의 위치
프록시 서버 배치
프록시는 다양한 위치에 배치할 수 있다.
출구 프록시(egress proxy)
- 위치
- 로컬 네트워크의 출구에 위치한다.
- 목적
- 로컬 네트워크와 인터넷 사이의 트래픽을 제어하는 방화벽을 제공한다.
- 위치
접근 프록시(access proxy)
- 입구 프록시(ingress proxy)라고도 불린다.
- 위치
- ISP(internet service provider)의 접근 지점에 위치한다.
- 목적
- ISP 고객들의 요청을 종합적으로 처리하여 다운로드 속도를 개선한다.
- 캐시 프록시에 자주 찾는 문서를 저장해둔다.
- ISP 고객들의 요청을 종합적으로 처리하여 다운로드 속도를 개선한다.
대리 프록시(surrogate)
- 리버스 프록시(reverse proxy)라고도 불린다.
- 위치
- 웹 서버 바로 앞에 위치한다.
- 목적
- 웹 서버로 들어오는 모든 요청을 처리한다.
- 보안을 향상시키고 성능을 개선시킨다.
네트워크 교환 프록시(network exchange proxy)
- 위치
- 네트워크 사이의 인터넷 피어링 교환 지점에 위치한다.
- 인터넷 교환 지점(IXP, Internet Exchange Point) : 여러 네트워크가 연결되어 트래픽을 교환하는 지점
- 피어링(peering) : 두 개의 인터넷 네트워크가 서로 연결된 채로 트래픽을 교환하는 것
- 네트워크 사이의 인터넷 피어링 교환 지점에 위치한다.
- 목적
- 캐시를 통해 혼잡을 완화하고 트래픽 흐름을 감시한다.
- 위치
프록시 계층
프록시 서버 간에는 부모-자식 관계가 존재한다.
- 부모 : 다음번 인바운드 프록시(서버와 가까운 쪽)
- 자식 : 다음번 아웃바운드 프록시(클라이언트와 가까운 쪽)
위 그림에서 프록시1
은 프록시2
의 자식이다. 또한 프록시2
는 프록시3
의 자식인 동시에 프록시1
의 부모이다. 프록시1
보다 서버에 가까이 있기 때문이다. 같은 이유로 프록시3
은 프록시2
의 부모가 된다.
트래픽이 프록시로 향하는 방법
클라이언트 트래픽은 다음의 방법 중 하나를 사용하여 프록시를 찾는다.
클라이언트에서 프록시를 사용하도록 설정
- 해당 설정에 의해 클라이언트가 HTTP 요청을 프록시로 보낸다.
인터셉트 프록시 (또는 투명 프록시)
- 중간에 스위치나 라우터가 트래픽을 가로채어 프록시로 보낸다.
- 클라이언트는 이 사실을 모른다.
대리 프록시를 사용
- 웹 서버의 앞에 위치하여 웹 서버의 이름과 IP 주소를 사용하며 클라이언트의 요청을 대신 받는 것
- DNS 이름 테이블을 수정하여 활성화한다.
리다이렉션 사용
- 서버가 클라이언트의 요청을 받으면 프록시로 리다이렉트 하도록 설정한다.
프록시 설정 방법
브라우저(클라이언트)가 프록시를 사용하도록 설정하는 방법에는 다음과 같이 몇 가지가 있다.
- 브라우저 기본 설정
- 수동 설정
- 프록시 자동 설정(proxy auto-configuration, PAC)을 사용
- WPAD 사용
브라우저 기본 설정
- 브라우저의 판매/배포자가 사전에 프록시 사용 설정을 해둔 경우이다.
수동 설정
- 브라우저에서 사용자가 직접 설정하는 방법
- Chrome의 경우 [Settings]-[System]-[Open your computer’s proxy settings]를 클릭하여 설정을 변경할 수 있다.
프록시 자동 설정(PAC)을 사용
- PAC(proxy auto-configuration) 파일을 사용해 그때그때 자동으로 프록시 설정을 하는 방법
WPAD 사용
- WPAD(웹 프록시 자동발견 프로토콜)는 브라우저에 맞는 PAC 파일을 찾아주는 알고리즘이다.
- 과정
- WPAD를 사용하여 PAC URI를 찾아낸다.
- 찾은 URI에서 PAC 파일을 가져온다.
메시지 추적
프록시를 거쳐가는 메시지의 흐름을 추적하기 위해 다음의 방법들을 사용한다.
- Via 헤더
- Trace 메서드
Via 헤더
- 개념
- 프록시가 추가하는 헤더로, 요청 메시지와 응답 메시지 모두에 표시될 수 있다.
- 메시지가 노드(프록시 or 게이터웨이)를 지날 때마다 해당 정보가 추가된다.
- 사용 목적
- 메시지를 추적한다.
- 요청 루프를 방지한다.
- 요청/응답의 과정에서 발신자의 프로토콜 기능을 식별하는 데 사용된다.
- 예시
via: 1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com
- 이 헤더를 통해 메시지가 두 개의 프록시를 거쳐갔음을 알 수 있다.
- 첫번째 프록시
- 사용된 프로토콜 : HTTP/1.1
- 프록시 이름 :
proxy-62.irenes-isp.net
- 두번째 프록시
- 사용된 프로토콜 : HTTP/1.0
- 프록시 이름 :
cache.joes-hardware.com
- 첫번째 프록시
TRACE 메서드
- 개념
- HTTP 요청을
TRACE
메서드로 보내는 방식
- HTTP 요청을
- 동작 방식
- 요청 메시지를 TRACE 메서드로 보낸다.
- 메시지가 서버로 가는동안 거쳐간 프록시를 요청 메시지 헤더의
Via
필드에 기록한다. - 서버가 메시지를 받으면 요청 메시지를 그대로 응답 메시지에 추가하여 보낸다.
Ref.
- contents
- images