✊ 필오의 개발일지
Back to Posts
2019년 9월 22일

프록시

프록시

1. 프록시란?

1.1 개인 프록시와 공유 프록시

개인 프록시

공유 프록시

1.2 Proxy vs Gateway


2. 왜 사용할까?

2.1 주 사용 케이스

  1. 어린이 필터: 성인 콘텐츠 차단용 필터링 프락시
  2. 문서 접근 제어자: 웹 리소스에 대한 단일한 접근 제어 전략을 구현하고 감사추적을 하기 위해.
  3. 보안 방화벽: 조직 안에 들어오거나 나가는 응용 레벨 프로토콜의 흐름을 네트워크의 한 지점에서 통제한다.
  4. 웹 캐시: 인기 있는 문서의 로컬 사본을 관리하고, 해당 문서에 대한 요청이 오면 빠르게 제공하여, 느리고 비싼 인터넷 커뮤니케이션을 줄인다.
  5. 대리 프락시(Surrogate)
  1. 콘텐츠 라우터
  1. 트랜스 코드
  1. 익명화 프락시 Anonymizer

3. 어디에 둘까?

3.1 프락시 서버 배치

  1. 출구 프락시 Egress
  1. 접근(입구) 프락시
  1. 대리 프락시 (=리버스 프락시)
  1. 네트워크 교환 프락시

3.2 프락시 계층

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

동적 부모 선택의 몇 가지 사례

  1. 부하 균형: 자식 프록시는 부하를 분산하기 위해 현재 부모들의 작업량 수준에 근거하여 부모 프록시를 고른다.
  2. 지리적 인접성에 근거한 라우팅: 자식 프록시는 원 서버의 지역을 담당하는 부모를 선택할 수 있다.
  3. 프로토콜/타입 라우팅: URI에 근거하여 다른 부모나 원서버로 라우팅 할 수 있다.
  4. 유료 서비스 가입자를 위한 라우팅: 사용자가 빠른 서비스를 위해 추가금을 지불했다면, 성능 개선을 위한 압축 엔진으로 라우팅 될 수 있다.

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

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

  1. 클라이언트를 수정한다.
  2. 네트워크를 수정한다.: 클라가 컨트롤할 수 없다면, 네트워크 인프라를 가로채서 웹 트래픽을 프록시로 가도록 조장하는 방법.

    인터셉트 프록시 (= transparent proxy): HTTP 트래픽을 지켜보고 가로채어 클라 모르게 트래픽을 프록시로 보내는 스위칭 장치와, 라우팅 장치가 필요.

  3. DNS namespace를 수정한다.
  1. 웹 서버를 수정한다.

4. 클라에서 프록시 설정 방법

4.1 수동

4.2 클라 프록시 설정

PAC 파일

자바스크립트 PAC 파일의 URI를 브라우저에 설정해야 한다.

FindProxyForURL(url, host): "DIRECT" | `PROXY ${host}:${port}` | `SOCKS ${host}:${port}`
function FindProxyForURL(url, host) { if (url.substring(0, 5) == 'http:') return 'PROXY http-proxy.mydomain.com:8080'; else if (url.substring(0, 4) == 'ftp:') return 'PROXY ftp-proxy.mydomain.com:8080'; else return 'DIRECT'; }

MDN PAC 파일 참고자료

WPAD 파일

웹 프록시 자동 발견 프로토콜 Web Proxy Auto-Discovery Protocol


5. 프록시 요청의 특이사항 6가지

  1. 프록시 URI는 서버 URI와 다르다.
  2. 가상 호스팅에서 일어나는 같은 문제
  3. 인터셉트 프록시는 부분 URI를 받는다
  4. 프록시는 프록시 요청과 서버 요청을 모두 다룰 수 있다.
  5. 전송 중 URI 변경
  6. 인터셉트 프록시를 이용한 URI 분석

5.1 프록시 URI는 서버 URI와 다르다.

클라 => 서버 GET /index.html HTTP/1.0 User-Agent: SuperBrowserv1.3 클라 => 프록시 GET http://www.mary.com/index.html HTTP/1.0 User-Agent: SuperBrowserv1.3

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

5.3 인터셉트 프록시는 부분 URI를 받는다

5.4 프록시는 프록시 요청과 서버 요청을 모두 다룰 수 있다.

5.5 전송 중 URI 변경

프록시 서버는 요청 URI의 변경에 엄격해서는 안된다. 사이드 이펙트를 일으킬 수 있다.


6. 메세지 추적

6.1 Via 헤더

Via: 1.1 proxy-62.irenes-isp.net, 1.0 cache.joes-hardware.com
  1. HTTP 1.1 프로토콜로 구현, proxy-62.irenes-isp.net로 불림
  2. HTTP 1.0 프로토콜로 구현, cache.joes-hardware.com로 불림

Via 문법

Via: ([ protocol-name "/ ] protocol-version ( host [ ":" port] ) [ comment ]), (...)
Via: 1.1 62e18ccb7bd6.cloudfront.net (CloudFront) protocol-name: HTTP protocol-version: 1.1 host: 62e18ccb7bd6.cloudfront.net comment: (CloudFront)

Via 요청과 응답 경로

Via와 게이트웨이

Server헤더와 Via헤더

Server: nginx/1.10.3 (Ubuntu)

Via가 개인정보 보호와 보안에 미치는 영향

Via 1.0 foo, 1.1 devirus.company.com, 1.1 access-logger.company.com 아래처럼 합칠 수 있다. Via: 1.0 foo, 1.1 concealed-stuff

6.2 TRACE 메서드

Max-Forwards


7. 프락시 인증

  1. 클라는 407 응답을 받게되면, 사용자에게 요구되는 자격을 수집한다.
  2. 자격을 획득하면: Proxy-Authenticate 헤더 필드에 자격을 담아서 다시 보낸다.
  3. 자격이 유효하면: 프락시는 원요청을 통과시킨다. 자격이 유효하지 않으면: 407 응답을 보낸다.

8. 프락시 상호운용성

8.1 지원하지 않는 헤더와 메서드 다루기

8.2 OPTIONS: 어떤 기능을 지원하는지 알아보기

8.3 Allow 헤더

Allow: GET, HEAD, PUT


참고자료

  1. MDN PAC 파일 참고자료
  2. DHCP (Dynamic Host Configuration Protocol) 
Previous웹에서 앱으로 이동하기 (feat.딥링크)
Next한글은 노토산스, 영문/숫자는 다른 폰트로 해주세요...👀 (feat. unicode)

Related

© 2025 Felix