Nginx Reverse Proxy 정리

2024. 5. 18. 13:09개발노트

리버스 프록시란?

리버스 프록시는 클라이언트로부터의 요청을 받아 이를 적절한 백엔드 서버에 전달하고 백엔드 서버의 응답을 다시 클라이언트로 전달하는 역할을 한다.
이 글에서는 Nginx 리버스 프록시에 대한 주요 기능과 기본 설정만 정리한다.

자세한 내용은 공식 문서 참고 https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

 

NGINX Reverse Proxy | NGINX Documentation

NGINX Reverse Proxy Configure NGINX as a reverse proxy for HTTP and other protocols, with support for modifying request headers and fine-tuned buffering of responses. This article describes the basic configuration of a proxy server. You will learn how to p

docs.nginx.com

 

Nginx 리버스 프록시 주요 기능

  • 로드 밸런싱(Load Balancong)
    • Nginx는 여러 백엔드 서버로 트래픽을 분산시켜 서버 간 부하를 균등하게 분산시킬 수 있다.
    • 라운드 로빈, 가중치 기반 분산, IP 해시 등 다양한 기법을 지원한다.
  • SSL/TLS 종료(SSL[각주:1]/TLS[각주:2] Termination)
    • Nginx는 클라이트와의 SSL/TLS 연결을 처리하여 백엔드 서버가 암호화되지 않은 트래픽만 처리하도록 할 수 있다.
      이를 통해 백엔드 서버의 부하를 줄이고 SSL 인증서를 중앙에서 관리할 수 있다. 
  • 캐싱
    • 정적 콘텐츠나 API 응답 등을 캐싱하여 서버 부하를 줄이고 응답 시간을 단축할 수 있다.
    • 특정 조건에 따라 캐시를 제여 할 수 있다.
  • 압축
    • Nginx는 클라이언트로 전달하기 전에 응답 데이터를 압축하여 전송 시간을 줄일 수 있다.
  • 보안
    • 클라이언트와 백엔드 서버 간의 통신을 분리하려 보안을 강화할 수 있다.
    • 방화벽 기능, IP 차단, DDoS 방어 등을 통해 서버를 보호할 수 있다.

Nginx 리버스 프록시 설정 예시

Nginx가 example.com 도메인으로 들어오는 요청을 백엔드 서버(예: http://localhost:8080)로 전달

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
  • listen: Nginx가 청취할 포트 번호를 지정
  • location /: 모든 요청을 처리할 위치 블록을 정의
  • proxy_pass: 요청을 전달할 백엔드 서버의 주소를 지정
  • proxy_set_header: 백엔드 서버로 전달할 헤더를 설정, 이를 통해 클라이언트의 원래 IP 주소와 프로토콜 정보를 백엔드 서버가 알 수 있게 한다.

 

  1. SSL이란 보안 소켓 계층(Secure Sockets Layer)으로서 사용자와 서버 간의 데이터를 암호화하는 표준 기술을 말합니다. [본문으로]
  2. 전송 계층 보안(TLS)은 기존 SSL 취약성을 수정하는 업그레이드된 SSL 버전입니다. TLS는 더 효율적으로 인증하고 암호화된 통신 채널을 계속 지원합니다. [본문으로]