• proxy
  • load-balancing
  • book

서버/인프라를 지탱하는 기술 Ch.2 — 리버스 프록시를 도입하는 이유

서버/인프라를 지탱하는 기술 2장을 읽고 리버스 프록시의 요청 제어, 메모리 효율, 버퍼링 역할을 정리한다.

시리즈 · DevOps 서적2 / 5
  1. 서버/인프라를 지탱하는 기술 Ch.1 — 다중화와 부하분산의 기본
  2. 서버/인프라를 지탱하는 기술 Ch.2 — 리버스 프록시를 도입하는 이유
  3. 서버/인프라를 지탱하는 기술 Ch.4 — 부하 그리고 Load Average
  4. 시스템 성능 엔지니어링 Ch.1~2 — 소개와 방법론
  5. 시스템 성능 엔지니어링 Ch.4 — 관측 가능성 도구와 모니터링 S/W의 본질

『서버/인프라를 지탱하는 기술』 2장 “한 단계 높은 서버/인프라 구축” 중 리버스 프록시 도입 부분을 정리한 내용이다.

리버스 프록시란

리버스 프록시는 웹 서버 앞에 위치해 클라이언트의 요청을 받아 뒤의 웹 서버로 전달한다. 외부(WAN)에서 내부(LAN)로 들어오는 요청을 대리하며, 요청 도중에 끼어들어 다양한 전후 처리를 수행할 수 있다.

클라이언트 요청이 인터넷을 거쳐 리버스 프록시에서 오리진 서버로 분배되는 흐름

도입했을 때의 장점은 다음과 같다.

  • HTTP 요청 내용에 따라 시스템의 동작을 제어할 수 있다. (L7 스위치와 비슷한 역할)
  • 시스템 전체의 메모리 사용 효율이 향상된다.
  • 웹 서버가 응답하는 데이터를 버퍼링한다.
  • 서버의 실제 IP를 숨길 수 있어 보안상으로도 이점이 있다.

HTTP 요청 내용에 따른 동작 제어

URL에 의한 제어

URL을 보고 최종 처리를 각기 다른 서버에 분배할 수 있다.

  • /image/logo.jpg는 이미지용 웹 서버로
  • /news는 동적 컨텐츠를 생성하는 AP 서버로

로직 처리가 필요 없는 정적 파일은 바로 응답할 수 있어 요청을 효율적으로 처리할 수 있다.

IP 주소에 의한 제어

IP 주소와 URL에 의한 제어를 조합해, 관리자 전용 페이지에는 특정 IP 주소만 접속 가능하도록 제한할 수 있다.

User-Agent에 의한 제어

검색엔진 로봇 대응에 이용할 수 있다. 일반 사용자에게는 캐싱하기 어려운 페이지라도, 봇의 요청에는 캐싱된 결과를 반환하도록 설정할 수 있다.

메모리 사용 효율 향상

동적 컨텐츠를 반환하는 AP 서버는 정적 컨텐츠만 반환하는 웹 서버에 비해 수 배에서 수십 배의 메모리를 소비한다.

  • AP 서버는 클라이언트의 요청 하나에 프로세스 또는 스레드 하나를 할당해 처리한다.
  • 정적 컨텐츠 요청을 가벼운 웹 서버가 대신 처리하면, 그만큼 AP 서버의 프로세스와 스레드를 절약할 수 있다.

응답 데이터의 버퍼링

  • TCP 연결 비용을 줄이기 위해 Keep-Alive를 사용한다.
  • AP 서버가 클라이언트와 직접 Keep-Alive를 유지하면 그동안 AP 서버의 프로세스가 점유된다. 그래서 Keep-Alive는 클라이언트와 리버스 프록시 사이에서만 사용한다.
  • 리버스 프록시와 AP 서버 사이의 Keep-Alive는 끈다.

읽으면서 “리버스 프록시의 스레드는 점유당해도 괜찮은가? 그만큼 AP 서버의 자원을 늘리면 되는 것 아닌가?“라는 의문이 들었다. 답은 비용의 차이였다. AP 서버의 프로세스와 스레드는 리버스 프록시가 사용하는 자원보다 훨씬 무겁기 때문에, 연결을 붙잡아 두는 역할은 가벼운 쪽이 맡는 것이 효율적이다.