NGINX는 매우 뛰어난 성능을 자랑하는 웹 서버로 명성을 얻을 만한 충분한 이유가 있습니다. 많은 분이 NGINX를 리버스 프록시로도 사용할 수 있다는 사실은 알고 있지만, 리버스 프록시로서 얼마나 강력한지는 잘 모를 수 있습니다.
리버스 프록시란 무엇인가요?
먼저 한 걸음 물러서서 프록시 서버란 무엇인지 살펴보겠습니다. Wikipedia에 잘 정리된 정의가 있습니다:
“프록시 서버는 다른 서버의 리소스를 요청하는 클라이언트의 요청을 중개하는 서버(컴퓨터 시스템 또는 애플리케이션)이다.”
따라서 프록시 서버는 클라이언트와 클라이언트가 찾는 데이터를 호스팅하는 실제 서버 사이에 위치합니다. 클라이언트에는 프록시 서버가 실제 백엔드 서버처럼 보이고, 백엔드 서버에는 프록시 서버가 클라이언트처럼 보입니다. 리버스 프록시 서버의 정의를 알아보기 위해 다시 Wikipedia를 살펴보겠습니다:
“[역방향] 프록시는 하나 이상의 서버에서 클라이언트를 대신해 리소스를 가져오는 프록시 서버의 한 유형이다.”
차이점은 프록시 서버가 클라이언트와 단일 백엔드 서버 사이에 위치하는 반면, 리버스 프록시 서버는 하나 이상의 백엔드 서버 앞에 위치하여 각 요청에 어떤 서버를 사용할지 결정한다는 것입니다.
리버스 프록시를 사용하면 어떤 이점이 있나요?
리버스 프록시 서버를 사용하는 이유는 무엇일까요? 다음과 같은 여러 가지 이점이 있습니다:
- 동시성 – 인터넷 애플리케이션에서는 많은 클라이언트가 각각 여러 연결을 여는 경우가 많아 백엔드 서버에 매우 많은 연결이 발생합니다. 많은 웹 서버와 애플리케이션 서버는 대량의 연결을 원활하게 처리하지 못하므로(웹 서버로 사용하는 NGINX는 예외), 여러 연결을 더 효율적으로 처리할 수 있는 리버스 프록시를 추가하면 백엔드 서버의 성능을 크게 향상할 수 있습니다.
- 복원력 – 클라이언트가 백엔드 서버에 직접 연결된 상태에서 해당 서버에 장애가 발생하면, 현재 연결되어 있거나 연결을 시도 중인 모든 클라이언트의 요청이 실패합니다. 리버스 프록시 서버는 백엔드 서버의 상태를 모니터링하고, 장애가 발생한 서버가 정상화될 때까지 해당 서버로 요청을 보내지 않을 수 있습니다. 리버스 프록시가 요청을 정상적으로 작동 중인 백엔드 서버로 자동 전송하므로 클라이언트에는 오류가 표시되지 않습니다.
- 확장성 – 리버스 프록시는 백엔드 서버 그룹을 대표하는 단일한 ‘공개 접점’이므로, 트래픽 부하 변화에 따라 서버를 추가하거나 제거할 수 있습니다.
- 계층 7 라우팅 – 리버스 프록시는 모든 서버로 향하는 트래픽을 파악하고, 필요에 따라 요청과 응답을 수정하면서 각 요청을 어디로 보낼지 지능적으로 결정할 수 있습니다. 요청의 특정 HTTP 헤더, URL의 일부, 클라이언트의 지리적 위치 등을 기준으로 라우팅을 결정할 수 있습니다.
- 캐싱 – 리버스 프록시는 캐싱을 수행하기에 매우 적합합니다. 모든 요청을 백엔드 서버로 보내 각 백엔드 서버가 자체 캐시를 구축하도록 하는 것보다 리버스 프록시에서 콘텐츠를 캐싱하는 편이 일반적으로 훨씬 효율적입니다.
- 기타 기능 – 리버스 프록시는 백엔드 서버 앞에 위치하여 대역폭이나 요청 속도에 따른 트래픽 조절, 연결 제한, 다양한 권한 부여 체계와의 통합, 활동 모니터링 등 여러 기능을 수행할 수도 있습니다.
NGINX Plus를 리버스 프록시로 사용하기
NGINX Plus는 NGINX Open Source의 뛰어난 웹 서버 기능에 더 많은 기능을 추가하여, 독점 하드웨어 어플라이언스를 대체할 수 있는 완전한 기능을 갖춘 애플리케이션 전송 컨트롤러(ADC)를 제공합니다.
다음은 NGINX Plus에서 제공하는 기능 중 일부입니다.
로드 밸런싱
가중 및 비가중 방식을 포함한 다양한 부하 분산 알고리즘 중에서 선택할 수 있습니다. 세션 지속성도 지원됩니다. NGINX Plus는 HTTP, HTTPS, WebSocket, FastCGI, memcached, SCGI, SPDY[현재는 더 이상 사용되지 않으며, 이를 대체한 HTTP/2도 NGINX Plus에서 부하 분산 가능] 및 uwsgi의 부하를 분산할 수 있습니다. 자세히 보기.
상태 확인
백엔드 서버 상태에 대한 수동 및 능동 모니터링을 모두 지원합니다. NGINX Plus가 노드에 연결할 수 없으면 해당 노드는 다운된 것으로 표시됩니다. 백엔드 노드를 대상으로 능동 상태 검사를 주기적으로 실행하도록 구성할 수도 있습니다. 또한 새로 온라인 상태가 된 노드에 갑작스럽게 많은 트래픽이 몰리는 것을 방지하기 위해, 느린 시작 기능을 사용하여 NGINX Plus가 해당 노드로 전송하는 트래픽을 서서히 늘릴 수 있습니다. 자세히 보기.
요청 라우팅
트래픽은 클라이언트 IP 주소, 호스트 이름, URI, 쿼리 문자열, 헤더 등 요청의 모든 요소를 기준으로 라우팅할 수 있습니다.
요청 및 응답 재작성
헤더, 본문, URI를 비롯해 요청 또는 응답의 모든 부분을 수정할 수 있습니다. NGINX Plus는 헤더를 추가하거나 삭제할 수도 있습니다. 자세히 알아보기.
캐싱
응답을 캐시할 수 있으며, 캐시할 콘텐츠 유형과 캐시 기간을 설정할 수 있습니다. 캐시에서 항목을 삭제할 수도 있습니다. 자세히 보기.
압축
Gzip 압축을 지원하며, 압축할 콘텐츠와 압축 사용 시점을 세밀하게 제어할 수 있습니다. 자세히 보기.
SSL/TLS 처리
SSL/TLS 복호화 및 암호화가 지원되며, 서로 다른 인증서를 사용하여 여러 도메인 이름을 복호화할 수 있습니다. 자세히 보기.
실시간 활동 모니터링 및 로깅
JSON 형식으로 인코딩된 NGINX Plus 통계는 간단한 HTTP 요청을 통해 확인할 수 있습니다. 통계를 표시하는 대시보드 웹 페이지가 제공되며, 사용자 지정 또는 타사 모니터링 도구로 통계를 전송할 수도 있습니다. 사용자 지정 형식의 로그는 로컬 로깅과 syslog로 내보내기 모두에 사용할 수 있도록 구성할 수 있습니다. 자세히 알아보기.
그 밖에도 다양한 기능
NGINX는 비디오 스트리밍 지원, 메일 프록시 지원, GeoIP 지원, 서비스 중단 없는 원활한 재시작 및 업그레이드, 트래픽 조절, 연결 제한 등 훨씬 더 많은 기능을 제공합니다. 자세한 내용은 nginx.com 및 nginx.org에서 확인하세요.
작성자 소개

관련 블로그 게시물
시청하기: KubeCon North America 2023에서의 NGINX Gateway Fabric
이 영상에서는 KubeCon의 NGINX 부스를 찾아가, 저희가 공개한 Kubernetes Gateway API 구현을 살펴봅니다.
F5 NGINX로 대규모 WAF 플릿을 확인하고 관리하는 2가지 방법
앱 보안을 강화하는 두 가지 방법을 소개합니다. NGINX Management Suite를 통해 WAF 운영에 대한 가시성을 높이고, NGINX App Protect WAF를 활용해 코드형 보안을 구현하는 것입니다.
Ingress 컨트롤러 선택 가이드, 4부: NGINX Ingress Controller 옵션
개발 주체, 개발 철학, 프로덕션 환경 준비도, 보안 및 지원을 기준으로 어떤 NGINX Ingress 컨트롤러가 가장 적합한지 알아보세요.
진화하는 공격 환경에 NGINX App Protect Denial of Service가 적응하는 방법
NGINX App Protect Denial of Service(DoS)가 계층 7 DoS 공격을 방어하기 위해 완화 방법을 실시간으로 조정하는 방식을 설명합니다. 정상적인 사용자 행동과 서버 상태에 대한 모델을 생성하여 공격을 나타내는 이상 징후를 감지하고 맞춤형 완화 시그니처를 적용할 수 있습니다.
NGINX Instance Manager를 활용한 대규모 구성 업데이트 및 인증서 관리
NGINX Instance Manager 버전 1.0에는 두 가지 새로운 기능이 도입되었습니다. NGINX 인스턴스에 태그와 사용자 역할을 지정하면 전체 그룹에 구성을 한 번에 적용할 수 있습니다. 인증서 검사는 만료 예정인 인증서를 감지하여 서비스 중단을 방지할 수 있도록 인증서를 교체할 수 있게 해줍니다.
Netflix가 자사 CDN의 핵심으로 NGINX를 선택한 이유
Netflix가 글로벌 콘텐츠 전송 네트워크인 Open Connect의 스트리밍 미디어 기술로 NGINX를 선택한 이유를 NGINX 개발자 Gleb Smirnoff에게서 알아보세요.