본문 바로가기
books/HTTP 완벽가이드

[HTTP 완벽가이드 6장] 프락시

by Moonsc 2020. 5. 24.
728x90

2부.HTTP : HTTP 아키텍처



6장.프락시

프락시는 클라이언트와 서버 사이에 위치하여 그들 사이의 HTTP 메시지를 정리하는 중개인 처럼 동작하는 중개자 역할


6.1 웹 중개자

  • 웹 프락시 서버는 클라이언트 입장에서 트랜잭션을 수행하는 중개인

  • 프락시가 없다면 클라이언트는 서버와 직접 이야기 해야한다.

  • 프락시가 있다면 프락시는 클라이언트 입장에서 서버와 대화를 해준다.

  • 트랙잭션을 완료하는 것이 클라이언트라는 것은 변함없지만 프락시 서버가 제공하는 좋은 서비스를 이용할 수 있다.

    1) 개인 프락시과 공유 프락시

    • 프락시 서버는 하나의 클라이언트를 독점할 수 있고 여러 클라이언트를 공유할 수 있다.

      공용 프락시

      • 대부분 프락시는 공용 프락시이다.
      • 중앙 집중형 프락시를 관리하는게 더 비용효율이 좋고 쉽다.
      • 캐시 프락시 서버와 같은 몇몇 프락시 애플리케이션은 프락시를 이용하는 사용자가 많을수록 유리한데,
        공통된 요청에서 이득을 취하기 때문이다.

      개인 프락시

      • 흔하지 않지만 꾸준히 사용된다.
      • 브라우저의 기능 확장이나 성능 개선, 무료 ISP 서비스를 위한 광고를 운영하기 위해 작은 프락시를 사용자 컴퓨터에서 직접 실행

    2) 프락시 대 게이트웨이

    • 프락시는 같은 프로토콜을 사용하는 둘 이상의 애플리케이션을 연결한다.
    • 게이트웨이으는 다른 프로토콜을 사용하는 둘 이상의 애플리케이션을 연결한다.
    • 실질적인 차이는 모호하다 : 브라우저와 서버는 다른 버전의 HTTP를 구현하기 떄문에,
      프락시는 때때로 약간의 프로토콜을 변환하기도 한다.
    • 상용 프락시 서버는 SSL 보안 프로토콜, SOCKS 방화벽, FTP 접근, 웹 기판 애플리케이션을 지원하기 위해 게이트웨이 기능을 구현한다.

6.2 왜 프락시를 사용하는가?

  • 프락시 서버는 실용적이고 유용하면 무슨 일이든 한다.

  • 보안 개선, 성능 개선, 비용 절약

  • 모든 HTTP 트래픽을 들여다 볼 수 있기에, 부가적인 가치를 주는 여러 유용한 웹 서비스를 구현하기 위해 트래픽을 감시하거나 수정 가능

    어린이 필터

    • 성인 콘텐츠 차단

    문서 접근 제어

    • 등록된 사용자만 문서 접근 권한 허용

    보완 방화벽

    • 바이러스를 제거하는 웹이나 이메일 프락시 사용
    • 트래픽을 세심히 살펴보는 후크 제공

    웹 캐시

    • 클라이언트가 자주 찾는 문서의 로컬 사본을 관리하고 해당 문서에 대한 요청이 오면 빠르게 제공

    대리 프락시

    • 웹 서버인 것처럼 위장하여 리버스 프락시라고 불리는 이들은 진짜 웹 서버 요청을 받지만 서버와는 달리 요청 받은 콘텐츠의
      위치를 찾아내기 위해 다른 서버와 커뮤니케이션 함
    • 공용 컨텐츠에 대한 느린 웹 서버의 성능 개선
    • 서버 가속기라고도 불림
    • 콘텐츠 라우팅 기능과 결합하여 주문형 복제 콘텐츠 분산 네트워크를 만들기 위해서도 사용

    콘텐츠 라우터

    • 트래픽 조건과 콘텐츠 종류에 따라 요청을 특정 웹 서버로 유도
    • 사용자들에게 제공할 여러 서비스를 구현하는데 사용
    • 캐시, 필터링 등등

    트랜스 코더

    • 본문 포맷을 수정할 수 있음
    • 데이터의 표현 방식을 자연스럽게 변환 (중개자에 의한 콘텐츠 변형)
    • GIF to JPG, 이미지 크기 줄이기, 색 강도 조절, 폰트 변경, 랭귀지 변경 등등

    익명화 프락시

    • HTTP 메시지에서 신원 식별할 수 있는 특성들(IP주소, From헤더, Referer헤더, 쿠키, URI 세션아이디)을 제거

6.3 프락시는 어디에 있는가?

1) 프락시 서버 배치
프락시 서버 배치

출구(Egress) 프락시 (리소스 도착) 
위치 : 로컬 네트워크 출구
용도 : 해커를 막는 방화벽, 요금 절약 성능 개선, 부적절 컨텐츠 브라우징

접근(입구) 프락시
위치 : ISP 접근 지점
용도 : 다운로드 속도 개선, 인터넷 대역폭 비용 감소

대리 프락시(모든 요청)  
위치 : 네트워크 가장 끝, 서버 바로 앞
용도 : 캐시

네트워크 교환 프락시  
위치 : 네트워크 사이
용도 : 캐시를 이용한 트래픽 흐름 감시, 충분한 처리능력을 갖춘 프락시

2) 프락시 계층

  • 메시지가 최정적으로 원 서버에 도착할 때 까지 프락시와 프락시를 거쳐 이동할 수 있다.

  • 프락시 계층에서 프락시들은 부모와 자식 관계를 갖는다.

  • 인바운드 프락시(서버 쪽)의 자식은 아운바운드 프락시(클라이언트 쪽)

  • 프락시 서버는 여러가지 판단 근거에 의해 메시지를 다양하고 유동적인 프락시 서버와 원 서버들의 집합에 보낸다. (모든 프락시를 거치는것은 아님)

    3) 어떻게 프락시는 트래픽을 처리하는가?

  • 클라이언트 트래픽이 프락시로 가도록 하는 네 가지 방법

    클라이언트 수정

    • 구글 크롬과 마소의 브라우저를 포함한 많은 웹 클라이언트들은 수동 혹은 자동 프락시 설정을 지원
    • 설정되어 있다면 의도적으로 프락시에게 요청을 보낸다.

    네트워크 수정 (인터셉트 프락시)

    • 클라이언트는 알 수도 간섭도 할 수 없는 상태
    • 네트워크 인프라를 가로챈다.
    • 스위칭 장치와 라우팅 장치 필요

    DNS 수정

    • 웹 서버 앞에 위치하여 웹 서버 이름과 IP 주소를 자신이 직접 사용
    • 모든 요청이 프락시로 간다.
    • 몇몇 설치본에서는 실제 서버의 IP와 이름은 변경되고 프락시가 사용하게 된다.

    웹 서버 수정

    • HTTP 리다이렉션 명령을 클라이언트에게 돌려줌으로써 클라이언트 요청을 프락시로 리다이렉트 하도록 설정
    • 리다이렉트를 받는 즉시 프락시와의 트랙잭션 시작

6.4 클라이언트 프락시 설정

수동설정
- 프락시를 사용하겠다고 명시적으로 설정

브라우저 기본 설정
- 브라우저 벤더나 배포자는 소비자에게 전달하기 전에 미리 프락시를 설정 할 수 있음

프락시 자동 설정
- 자바스크립트 프락시 자동 설정(PAC) 파일에 대한 URI를 제공
- 클라이언트는 프락시를 써야하는지, 써야한다면 어떤 프락시 서버를 써야 할지 판단하기 위해 자바스크립트 파일을 가져와서 실행

WAPD 프락시 발견
- 대부분 브라우저는 자동설정 파일을 다운받을 수 있는 '설정 서버'를 자동으로 찾아주는 웹 프락시 프로토콜을 제공

6.5 프락시 요청의 미묘한 특징들

1) 프락시 URI는 서버 URI와 다르다

  • 웹 서버와 웹 프락시 메시지의 문법은 같지만 예외가 있다. 클라이언트가 프락시 대신 서버로 요청을 보내면 요청의 URI가 달라진다.

  • 클라이언트와 웹 서버
    GET /index.html HTTP/1.0
    User-Agent: SuperBrowerv1.3

  • 클라이언트와 프락시
    GET http://www.marys-aniques.com/index.html HTTP/1.0
    User-Agent: SuperBrower v1.3

  • 원래의 HTTP 설계는 클라이어트는 단일 서버와 직접 대화하였다. 가상 호스팅도, 프락시에 대한 대비도 없었고 단일 서버는
    자신의 호스트 명과 포트번호를 알고 있으므로 불필요한 정보 발송을 피하기 위해 스킴, 호스트가 없는 URI만 보냈다.

  • 프락시가 사용 설정되어 있다면 완전한 URI를 설정이 안되어 있다면 부분 URI만 보낸다.

    2) 가상 호스팅에서 일어나는 같은 문제

  • 프락시의 스킴/호스트/포트번호 누락 문제는 가상으로 호스팅되는 웹 서버가 직면한 것과 같은 문제이다.

  • 가상 호스팅된 웹 서버는 여러 웹 사이트가 같은 물리적 웹 서버를 공유한다.

  • 가상으로 호스팅 되는 웹 서버는 요청이 접근하고자 하는 웹 사이트의 호스트명을 알 필요가 있다.

  • 명시적인 프락시는 요청 메시지가 완전한 URI를 갖도록 하고,
    가상으로 호스팅 되는 웹 서버는 호스트와 포트에 대한 정보가 담겨 있는 Host 헤더를 요구한다.

    3) 인터셉트 프락시는 부분 URI를 받는다.

  • 클라이언트는 자신이 프락시와 대화하고 있음을 항상 알고 있는 것이 아니기에 클라이언트가 프락시를 사용한다고 설정되어 있지 않더라도,
    클라이언트의 트래픽은 여전히 대리 프락시나 인터셉트 프락시를 지날 수 있다.

    대리 프락시
    : 원 서버의 호스트명과 아이피 주소를 사용해 원 서버를 대신하는 프락시 서버다.

    인터셉트 프락시
    : 네트워크 흐름에서 클라이언트에서 서버로 가는 트랙픽을 가로채 캐시된 응답을 돌려주는 일을 하는 프락시 서버다.

    4) 프락시는 프락시 요청과 서버 요청을 모두 다룰 수 있다.

  • 다목적 프락시 서버는 요청 메시지의 완전한 URI와 부분 URI를 모두 지원해야한다.

  • 프락시는 명시적인 프락시 요청에 대해서는 완전한 URI를 사용하고 아니면 부분 URI를 사용해야 하며,
    웹 서버 요청의 경우에는 가상 Host 헤더를 사용해야 한다.

    • 완전한 URI가 주어졌다면, 프락시는 그것을 사용해야 한다.
    • 부분 URI가 주어졌고 Host 헤더가 있다면 그것을 이용해 원서버 이름과 포트 번호를 알아낸다.
    • 부분 URI만 주어졌고, 프락시가 대리 프락시면 프락시에 실제 서버와 주소, 포트번호가 설정되어 있을 수 있다.
    • 이전에 어떤 인터셉트 프락시가 가로챘던 트래픽을 받았고, 그 인터셉트 프락시가 원 IP 주소와 포트번호를
      사용할 수 있도록 해두었다면 그것을 사용한다
    • 모두 실패하면 에러 메시지를 반환한다.

나머지 생략.

댓글