Infra

리버스 프록시

baek-dev 2025. 4. 3. 19:35

리버스 프록시(Reverse Proxy)란?

 

리버스 프록시(Reverse Proxy)클라이언트의 요청을 대신 받아 서버로 전달하고, 서버의 응답을 받아 다시 클라이언트에게 반환하는 중간 서버임.

 

일반적으로 로드 밸런싱, 보안 강화, 캐싱, SSL 처리, 웹 가속화 등의 목적으로 사용됨.

 


1️⃣ 리버스 프록시 vs 포워드 프록시

 

리버스 프록시와 포워드 프록시는 개념이 다름.

구분 리버스 프록시 (Reverse Proxy) 포워드 프록시 (Forward Proxy)
요청 방향 클라이언트 → 리버스 프록시 → 백엔드 서버 클라이언트 → 포워드 프록시 → 인터넷
사용 목적 서버 보호, 로드 밸런싱, SSL 처리 사용자 익명성 보호, 웹 필터링
클라이언트가 아는 서버 리버스 프록시가 서버처럼 동작 클라이언트가 프록시를 직접 설정
사용 예시 Nginx, HAProxy, AWS ALB, Cloudflare 회사 내부망 프록시, VPN, TOR

 

핵심 차이:

리버스 프록시는 서버를 보호하는 역할.

포워드 프록시는 클라이언트(IP) 보호 및 인터넷 접근을 제어하는 역할.

 


2️⃣ 리버스 프록시가 하는 역할

 

리버스 프록시는 여러 기능을 수행할 수 있음.

 

✅ 1. 로드 밸런싱 (Load Balancing)

여러 대의 백엔드 서버로 트래픽을 분산하여 서버 부하를 줄임.

대표적인 로드 밸런서 기능을 제공하는 리버스 프록시: Nginx, HAProxy, AWS ALB

 

📌 예제: Nginx 로드 밸런싱 설정

upstream backend_servers {
    server app-server1:8080;
    server app-server2:8080;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend_servers;
    }
}

위 설정은 app-server1, app-server2로 트래픽을 분산 처리함.

 


✅ 2. 캐싱(Caching)

정적 컨텐츠(이미지, CSS, JS)를 미리 저장하고 클라이언트 요청이 올 때 직접 응답하여 성능을 향상.

CDN(Content Delivery Network) 서비스도 리버스 프록시 기반으로 동작함 (예: Cloudflare, Akamai).

 

📌 예제: Nginx 캐싱 설정

server {
    location /images/ {
        proxy_cache cache_zone;
        proxy_pass http://backend;
    }
}

 

 


✅ 3. SSL 종료 (SSL Termination)

클라이언트와 리버스 프록시 간의 SSL 통신을 담당하여 백엔드 서버가 SSL 부하에서 벗어나도록 함.

HTTPS 요청을 처리한 후 내부적으로 HTTP로 변환하여 백엔드 서버와 통신.

 

📌 예제: SSL 인증서 적용

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass http://backend;
    }
}

 

 


✅ 4. 보안 강화 (Security & DDoS Protection)

IP 차단, 방화벽 역할, WAF(Web Application Firewall) 기능 제공.

DDoS 공격 방어 (예: Cloudflare, AWS Shield).

특정 요청 패턴을 필터링하여 악성 트래픽 차단.

 

📌 예제: 특정 IP 차단

server {
    location / {
        deny 192.168.1.1;
        proxy_pass http://backend;
    }
}

 

 


✅ 5. 서비스 분리 (API Gateway 역할)

API 요청을 특정 백엔드 서비스로 전달 (마이크로서비스 구조에서 사용).

GraphQL, REST API Gateway 역할 수행.

 

📌 예제: API 요청을 각각 다른 서비스로 분배

server {
    location /api/user/ {
        proxy_pass http://user-service;
    }
    location /api/order/ {
        proxy_pass http://order-service;
    }
}

/api/user/ 요청은 user-service로, /api/order/ 요청은 order-service로 전달됨.

 


3️⃣ 리버스 프록시로 사용할 수 있는 소프트웨어

 

✅ 1. Nginx

대표적인 리버스 프록시 & 웹 서버.

로드 밸런싱, 캐싱, SSL 종료, 보안 기능 지원.

사용 예: CDN, API Gateway, 마이크로서비스 라우팅

 

✅ 2. HAProxy

고성능 로드 밸런서이자 리버스 프록시.

L4, L7 로드 밸런싱 가능.

사용 예: 트래픽이 많은 사이트, 대규모 서버 운영 환경

 

✅ 3. AWS ALB(Application Load Balancer)

AWS에서 제공하는 클라우드 로드 밸런서.

HTTPS/SSL 종료, WAF 연동, 오토스케일링 가능.

 

✅ 4. Cloudflare

DDoS 방어, CDN, SSL 제공.

트래픽을 보호하고 성능을 최적화하는 글로벌 리버스 프록시 서비스.

 


4️⃣ 리버스 프록시의 장점과 단점

장점 단점
서버 보안 강화 (직접 노출 방지) 프록시 서버 장애 발생 시 전체 서비스 영향 가능
로드 밸런싱 및 성능 최적화 추가적인 설정이 필요 (특히 SSL, 캐싱 등)
SSL 처리 부담 감소 잘못된 설정 시 요청이 정상적으로 전달되지 않을 수 있음
캐싱으로 속도 향상 가능 서버 리소스를 추가적으로 사용해야 함

 

 


5️⃣ 리버스 프록시 vs 로드 밸런서

 

리버스 프록시와 로드 밸런서는 개념이 겹치는 경우가 많음.

비교 항목 리버스 프록시 로드 밸런서
주요 기능 보안, SSL 종료, 캐싱, API Gateway 트래픽 분산, 고가용성 유지
주요 목적 백엔드 서버 보호 & 최적화 여러 서버로 트래픽 균등 분배
예제 Nginx, Cloudflare AWS ALB, HAProxy

 

정리하면

리버스 프록시는 보안, 캐싱, SSL 종료, API 라우팅을 담당.

로드 밸런서는 트래픽을 여러 서버에 분산하여 부하를 줄이는 역할.

 


6️⃣ 리버스 프록시 실전 사용 예제

 

예제: Nginx 리버스 프록시 설정

 

📌 /api 경로는 backend-server로 프록시 처리

📌 정적 파일(.css, .js, .jpg)은 캐싱하여 처리

server {
    listen 80;

    location /api/ {
        proxy_pass http://backend-server;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
    }

    location ~* \.(?:ico|css|js|jpg|png|gif)$ {
        expires 30d;
        access_log off;
    }
}

 

효과

/api/ 요청은 백엔드 서버로 전달됨.

정적 파일은 Nginx에서 직접 캐싱하여 성능 최적화.

 


📌 정리

 

리버스 프록시란?

클라이언트와 백엔드 서버 사이에서 요청을 중개하는 서버.

로드 밸런싱, 캐싱, 보안 강화, SSL 종료 등의 기능 수행.

 

언제 사용할까?

서버 보안을 강화하고 싶을 때 (백엔드 서버를 직접 노출하지 않음).

여러 개의 서버로 트래픽을 분산할 때 (로드 밸런싱).

SSL 인증서 관리를 중앙에서 처리하고 싶을 때.

API Gateway 역할을 수행하여 요청을 특정 서비스로 전달하고 싶을 때.

 

 

 

 

출처 : ChatGPT

'Infra' 카테고리의 다른 글

Micrometer  (1) 2025.04.10
Prometheus  (0) 2025.04.09
Grafana  (0) 2025.04.08
메시지 브로커(Message Broker)  (0) 2025.03.15
Kafka 카프카  (1) 2025.02.02