HTTP 완벽 가이드 2-6. 프락시 ①


📘 HTTP 완벽 가이드 읽고 정리하기 🐿︎



🤔 웹 중개자 프락시



📑 프락시란?


웹 프락시 서버는 클라이언트와 서버 사이에 위치하여 그들 사이의 HTTP 메시지를 정리하는 중개인처럼 동작 (클라이언트의 입장에서 트랜잭션을 수행하는 중개인)

![](/assets/img/proxy.png)


📑 개인 프락시 / 공용 프락시


  • 개인 프락시

    • 하나의 클라이언트만을 위한 프락시
  • 공용 프락시

    • 대부분의 프락시는 공용이며 공유된 프락시

    • 여러 클라이언트가 함께 사용하는 프락시

    • 중앙 집중형 프락시를 관리하는 게 더 비용효율이 높고 쉬움

    • 여러 사용자들의 공통된 요청에서 이득을 취할 수 있기 때문에 캐시 프락시 서버와 같은 몇몇 프락시 애플리케이션은 프락시를 이용하는 사용자가 많을수록 유리함


📑 프락시 vs 게이트웨이


  • 프락시는 같은 프로토콜을 사용하는 둘 이상의 애플리케이션을 연결

  • 게이트는 서로 다른 프로토콜을 사용하는 둘 이상을 연결 / 클라이언트와 서버가 서로 다른 프로토콜로 말하더라도 서로 간의 트랜잭션을 완료할 숭수 있도록 해주는 프로토콜 변환기처럼 동작



🤔 프락시를 사용하는 이유와 종류


  • 프락시 서버는 보안을 개선하고, 성능을 높여주며, 비용을 절약한다. 또한, 프락시 서버는 모든 HTTP 트래픽을 들여다보고 건드릴 수 있기 때문에, 프락시는 부가적인 가치를 주는 여러 유용한 웹 서비스를 구현하기 위해 트래픽을 감시하고 수정할 수 있다

  • 어린이 필터 : 교육 콘텐츠에는 제한 없는 접근을 허용, 어린이에게 부적절한 사이트의 접근은 강제로 거부

  • 문서 접근 제어자

    • 많은 웹 서버들과 웹 리소스에 대한 단일한 접근 제어 전략을 구현하고 감사 추적을 하기 위해 사용될 수 있음

    • 대기업 환경이나 그 외의 분산된 관료 조직에서 유용

    • 각기 다른 조직에서 관리되는 다양한 종류의 웹 서버들에 대한 접근 제어를 수시로 갱신할 필요 없이, 중앙 프락시 서버에서 접근 제어를 설정할 수 있음

  • 보안 방화벽

    • 보안 강화를 위해서도 프락시 서버를 사용

    • 조직 안에 들어오거나 나가는 응용 레벨 프로토콜의 흐름을 네트워크의 한 지점에서 통제

  • 웹 캐시

    • 프락시 캐시는 인기 있는 문서의 로컬 사본을 관리하고 해당 문서에 대한 요청이 오면 빠르게 제공 해, 느리고 비싼 인터넷 커뮤니케이션을 줄임
  • 대리 프락시 (Surrogate)

    • 대리 프락시(= 리버스 프락시)는 진짜 웹 서버 요청을 받지만 웹 서버와는 달리 요청 받은 콘텐츠의 위치를 찾아내기 위해 다른 서버와 커뮤니케이션을 시작함

    • 공용 콘텐츠에 대한 느린 웹 서버의 성능을 개선하기 위해 사용될 수 있으며, 이런 식으로 사용되는 대리 프락시를 ‘서버 가속기’라고 함

    • 콘텐츠 라우팅 기능과 결합돼 주문형 복제 콘텐츠의 분산 네트워크를 만들기 위해 사용될 수도 있음

  • 콘텐츠 라우터

    • 인터넷 트래픽 조건과 콘텐츠의 종류에 따라 요청을 특정 웹 서버로 유도하는 콘텐츠 라우터로 동작할 수 있음

    • 사용자들에게 제공할 여러 서비스를 구현하는데에도 사용할 수 있음 (ex) 더 높은 성능을 위해 돈을 지불 한 사용자에게 콘텐츠 라우터가 요청을 가까운 복제 캐시로 전달 / 필터링 서비스에 가입한 사용자에게 HTTP 요청이 필터링 프락시를 통과하도록 함)

  • 트랜스코더

    • 트랜스코딩 : 프락시 서버는 콘텐츠를 클라이언틍게 전달하기 전에 본문 포맷을 수정할 수 있는데, 이와 같이 데이터의 표현 방식을 자연스럽게 변환하는 것을 말함

    • ex) 트랜스코딩 프락시는 크기를 줄이기 위해 자신을 거쳐 가는 GIF 이미지를 JPG 이미지로 변환 할 수도, 문서를 바로 외국어 문서로 변환 할 수도 있다

  • 익명화 프락시 (Anonymizer)

    • HTTP 메시지에서 신원을 식별할 수 있는 특성들(클라이언트 IP 주소, 쿠키, From 헤더, URI 세션 아이디, …)을 적극적으로 제거함으로써 개인 정보 보호와 익명성 보장에 기여

    • 신원 정보를 제거하게 되면 사용자의 브라우징 경험의 질이 떨어질 수도 있고, 적절히 동작하지 않을 수도 있음



🤔 프락시는 어디에 있고, 언제 네트워크 아키텍처상에 배치되는가?



📑 프락시 서버 배치


  • 출구(Egress) 프락시

    • 로컬 네트워크와 더 큰 인터넷 사이를 오가는 트래픽을 제어하기 위해 프락시를 로컬 네트워크의 출구에 박아 넣을 수 있음

    • 회사 밖의 해커를 막는 방화벽을 제공하거나, 인터넷 요금을 절약하고 인터넷 트래픽의 성능을 개선하거나, 또는 학생들이 부적절한 콘텐츠를 브라우징하는 것을 막기 위해 출구 프락시를 사용할 수 있음

  • 접근(입구) 프락시

    • 고객응로부터의 모든 요청을 종합적으로 처리하기 위해 ISP 접근 지점에 위치하기도 함

    • ISP는 사용자들의 다운로드 속도를 개선하고 인터넷 대역폭 비용을 줄이기 위해 캐시 프락시를 사용, 많이 찾는 문서들의 사본을 저장함

  • 대리 프락시 (=리버스 프락시)

    • 네트워크의 가장 끝에 있는 웹 서버들의 바로 앞에 위치하여 웹 서버로 향하는 모든 요청을 처리하고 필요할 때만 웹 서버에게 자원을 요청할 수 있음

    • 웹 서버에 보안 기능을 추가하거나 빠른 웹 서버 캐시를 느린 웹 서버의 앞에 놓음으로써 성능을 개선할 수도 있음

    • 대리 프락시는 일반적으로 웹 서버의 이름과 IP 주소로 스스로를 가장하기 때문에, 모든 요청은 서버가 아닌 이 프락시로 가게 됨

  • 네트워크 교환 프락시

    • 캐시를 이용해 인터넷 교차로의 혼잡을 완화하고 트래픽 흐름을 감시하기 위해, 충분한 처리 능력을 갖춘 프락시가 네트워크 사이의 인터넷 피어링 교환 지점들에 놓일 수 있음


📑 프락시 계층


  • 프락시들은 ‘프락시 계층’이라고 불리는 연쇄를 구성

      [클라이언트]  <->  [프락시1]    <->    [프락시2]     <->     [프락시3]  <->  [원 서버]
    
              프락시2의자식   프락시3의자식,1의부모    프락시2의부모
    
  • 프락시 계층에서 메시지는 최종적으로 원 서버에 도착할 때까지 프락시와 프락시를 거쳐 이동, 그 후 다시 프락시들을 거쳐 클라이언트로 돌아옴

  • 프락시 계층에서 프락시 서버들은 부모-자식 관계를 갖는데, 다음번 인바운드 프락시(서버에 가까운 쪽)를 부모 / 다음번 아웃바운드 프락시(클라이언트에 가까운 쪽)는 자식이라 부름

  • 프락시 계층 콘텐츠 라우팅

    • 위의 프락시 계층은 언제나 프락시1은 프락시2로, 프락시2는 프락시3으로 메시지를 보내는 정적인 계층

    • 프락시 서버는 여러 상황에 맞게 부모 프락시나 원 서버에게 라우팅, 다양하고 유동적인 메시지를 보낼 수 있음

      • ex1) 요청된 객체가 콘텐츠 분산을 위해 돈을 지불한 웹 서버에 속한 경우, 프락시는 요청을 가까운 캐시 서버에 보내 캐시된 객체를 반환하거나 그럴 수 없다면 서버에서 가져오게 할 수 있음

      • ex2) 요청이 특정 종류 이미지에 대한 것일 때, 접근 프락시는 그 요청을 특화된 압축 프락시에게 보내 그 프락시가 이미지를 가져와 압축하게 해, 느린 모뎀으로 접속했더라도 클라이언트가 빠르게 다운로드 할 수 있게 함

    • 동적 부모 선택의 예 (동적 부모 라우팅 로직은 제품(설정 파일, 스크립트 언어, 동적으로 실행 가능한 플러그인 등)마다 다르게 구현)

      • 부하 균형 : 자식 프락시는 부하를 분산하기 위해 현재 부모들의 작업량 수준에 근거해 부모 프락시를 고름

      • 지리적 인접성에 근거한 라우팅 : 자식 프락시는 원 서버의 지역을 담당하는 부모를 선택할 수도 있음

      • 프로토콜/타입 라우팅 : URI에 근거항여 다른 부모나 원 서버로 라우팅, 특정 종류의 URI를 갖고 잇는 요청의 경우 특별한 프락시 서버로 보내져 특별한 프로토콜로 처리될 수도 있음

      • 유료 서비스 가입자를 위한 라우팅 : 웹서비스 운영자가 빠른 서비스를 위해 추가금을 지불했다면, 그들의 URI는 대형 캐시나 성능 개선을 위한 압축 엔진으로 라우팅 될 수 있음


📑 프락시가 트래픽을 처리하는 방법


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

  • 클라이언트 수정

    • 클라이언트가 프락시를 사용하도록 설정되어 있다면, 클라이언트는 HTTP 요청을 바로, 의도적으로 원 서버가 아닌 프락시로 보냄
  • 네트워크 수정

    • 인터셉트 프락시 : 네트워크 인프라를 가로채 웹 트래픽을 프락시로 가도록 조정 / 이 가로챔은 일반적으로 HTTP 트래픽을 지켜보고 가로채 클라이언트 모르게 트래픽을 프락시로 보내는 스위칭 장치와 라우팅 장치를 필요로 함
  • DNS 이름공간 수정

    • 웹 서버 앞에 위치하는 프락시 서버인 대리 프락시는 웹 서버의 이름과 IP 주소를 자신이 직접 사용 -> 모든 요청은 서버 대신 대리 프락시로 감

    • 이는 DNS 이름 테이블을 수동으로 편집하거나 사용할 적ㅈ절한 프락시나 서버를 계산해주는 특별한 동적 DNS 서버를 이용해 조정될 수 있음

  • 웹 서버 수정

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

Categories:

HTTP