김우석 개발자

프록시

개요 : HTTP 완벽 가이드 책을 읽으며 내용을 정리한 글

목차

  • 프락시
    • 프락시란 무엇인가
    • 왜 프락시를 사용 하는가
    • 프락시는 어디에 있는가
    • 프락시 설정
    • 프락시 특징

프락시란 무엇인가


웹 프락시 서버는 클라이언트의 입장에서 트랜잭션을 수행하는 중개인의 역할을 수행한다.

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

웹 프락시가 있다면 클라이언트는 서버와 이야기 하는 대신 자신의 입장에서 서버와 대화해주는 프락시와 이야기한다.

서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 ‘프락시’, 그 중계 기능을 하는 것을 ‘프락시 서버’라고 한다

../../../../../public/assets/2021-04-10-HTTP-Proxy/Open_proxy_h2g2bob.svg

왜 프락시를 사용하는가


큰 이유는 보안을 개선하고, 성능을 높여주며, 비용을 절약해주는 역할을 한다.

그리고 프락시 서버는 모든 HTTP 트래픽을 들여다보고 건드릴 수 있기 때문에, 부가적인 가치를 주는 여러 유용한 웹 서비스를 구현하기 위해 트래픽을 감시하고 수정할 수 있다.

프락시의 사용 예)

  1. 어린이 필터 (프락시 이 자식..)

../../../../../public/assets/2021-04-10-HTTP-Proxy/kids_filter.png

  1. 문서 접근 제어자

대기업 환경이나 혹은 그 외의 분산된 관료 조직에서 유용하다. 많은 웹 서버들과 웹 리소스에 대한 단일한 접근 제어 전략을 구현하고 감사 추적을 하기 위해 사용될 수 있다.

  1. 웹 캐시

웹 사용자에 의해 빈번히 요청되는 데이터를 사용자와 지리적으로 가까운 웹캐시 서버에 보관해 빠른 서비스를 가능하게 한다. 또한 저장 디스크를 갖고 있어 최근 호출된 객체의 사본을 저장한다.

프락시는 어디에 있는가


  • 프락시의 위치
    • 출구 프락시

      로컬 네트워크와 더 큰 인터넷 사이를 오가는 트래픽을 제어하기 위해 프락시를 로컬 네트워크의 출구에 넣을 수 있다. 회사 밖의 해커들을 막는 방화벽을 위해, 인터넷 프래픽의 성능을 개선하기 위해 출구 프락시를 사용한다. 어린이 필터에도…

    • 접근 프락시

      사용자들의 다운로드 속도를 개선하고 인터넷 대역폭 코스트를 줄이기 위해 캐시 프락시를 사용해 많이 찾는 문서들의 사본을 저장한다. 고객으로부터의 모든 요청을 종합적으로 처리하기 위해 프락시는 ISP(Internet Service Provider) 접근 지점에 위치한다.

    • 대리 프락시

      주로 보안을 강화하기 위해 사용되며, 네트워크의 가장 끝에, 웹 서버들의 바로 앞에 위치하여 웹 서버로 향하는 모든 요청을 처리하고 필요할 때만 웹 서버에게 자원을 요청할 수 있다.

      • 대리 프락시를 사용하는 이유
        1. 부하 분산(Load Balancing) : 거대한 양의 트래픽을 하나의 서버로 다루기 보다 다수의 서버에 분산하는 방법. 프락시는 들어오는 트래픽을 서로 다른 서버에 분산시키는 작업을 한다.
        2. 보안 : 원 서버의 IP주소를 가려서 해킹으로부터 안전하게 한다. 침입자는 대리프락시의 서버만을 공격 할 수 있다. 이러한 원리를 이용하여 CDN을 작동시킨다.

        ../../../../../public/assets/2021-04-10-HTTP-Proxy/dns_server.png

        1. 캐싱 : 대리 프락시도 내용을 캐싱하는 것이 가능하다.
        2. SSL encryption : 모든 요청과 응답을 암호화합니다.

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


클라이언트는 보통 웹 서버와 직접 대화하기 때문에, 우리는 먼저 어떻게 HTTP 트래픽이 프락시로 향하는 길을 찾는지 알아야 한다.

  1. 클라이언트를 수정한다 : 구글 크롬과 마이크로소프트의 브라우저를 포함한 많은 웹 클라이언트들은 수동 혹은 자동 프락시 설정을 지원한다. 만약 클라이언트가 프락시를 사용하도록 설정되어 있다면, 클라이언트는 HTTP 요청을 바로 그리고 의도적으로 원 서버가 아닌 프락시로 보낸다.
  2. 네트워크를 수정한다 : 클라이언트는 알지도 못하고 간섭도 할 수 없는 상태에서, 네트워크 인프라를 가로채서 웹 트래픽을 프락시로 가도록 조정하는 몇 가지 기법이 있다. 이 가로챔(intercept)은 일반적으로 HTTP 트래픽을 지켜보고 가로채어 클라이언트 모르게 트래픽을 프락시로 보내는 스위칭 장치와 라우팅 장치를 필요로 한다. 이것을 인터셉트 프락시라고 한다.
  3. DNS 이름공간을 수정한다 : 웹 서버 앞에 위치하는 프락시 서버인 대리 프락시는 웹 서버의 이름과 IP 주소를 자신이 직접 사용한다. 그래서 모든 요청은 서버 대신 대리 프락시로 간다. 이는 동적 DNS 서버를 이용해서 조정될 수 있다.
  4. 웹 서버를 수정한다 : 웹 서버는 HTTP 리다이렉션 명령을 클라이어언트에게 돌려줌으로써 클라이언트의 요청을 프락시로 리다이렉트 하도록 설정할 수 있다. 리다이렉트를 받는 즉시 클라이언트는 프락시와의 트랜잭션을 시작한다.

클라이언트가 프락시를 설정하는 방법


  • 수동 설정

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

  • 브라우저 기본 설정

    브라우저 벤더나 배포자는 브라우저를 소비자에게 전달 하기 전에 프락시를 미리 설정해 놓을 수 있다.

    크롬 환경 : 설정 > 고급 설정 표시 > 프록시 설정 변경

  • 프락시 자동 설정 (Porxy Auto-Configuration)

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

  • WPAD 프락시 발견

    대부분의 브라우저는 자동설정 파일을 다운받을 수 잇는 ‘설정 서버’를 자동으로 찾아주는, 웹 프락시 자동발견 프로토콜(WPAD)을 제공한다.

프락시 요청의 특징들


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

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

클라이언트가 웹 서버로 요청을 보낼 때

GET /index.html HTTP/1.0
User-Agent: SuperBrowserv.1.3

클라이언트가 웹 프락시로 요청을 보낼 때

Get http://www.somewhere.com/index.html HTTP/1.0
User-Agent: SuperBrowser v1.3

# 완전한 URL을 보낸다

과거에 프락시가 없을 때, 클라이언트는 불필요한 정보 발송의 중복을 피하기 위해서 스킴과 호스트가 없는 부분 URL만 보냈다. 프락시가 부상하면서 이 문제(부분 URI)는 HTTP/1.0에서 프락시 요청의 경우 완전한 URI를 요구하는 것으로 해결했지만, 서버 요청의 경우 완전한 URI는 여전히 남아있다.

그래서 우리는 서버로는 부분 URI를, 그리고 프락시로는 완전한 URL를 보낼 필요가 있다. 프락시가 숨어있지 않는 경우, 클라이언트는 어떻게 요청을 보내야 하는지 알고 있다.

같은 카테고리의 글