Networking, Security, Protocols

Reverse Proxy(역방향 프록시)란?

Somaz 2024. 11. 13. 11:11
728x90
반응형

Overview

Reverse Proxy에 대해서 알아본다.

출처 : 머메이드 차트

 

 

 


 

Reverse Proxy란?

역방향 프록시(Reverse Proxy) 는 웹 서버 앞에서 클라이언트(예: 웹 브라우저) 요청을 웹 서버에 전달하는 서버의 한 유형이다. 역방향 프록시와 순방향 프록시의 주요 차이점은 서비스의 방향에 있다. 순방향 프록시(Forward Proxy)는 사용자와 인터넷의 방대한 자원 사이의 게이트웨이 역할을 하는 반면, 역방향 프록시는 인터넷과 더 작은 서버 그룹 사이의 게이트웨이 역할을 한다.

 

 

Reverse Proxy의 기능

  • 로드 밸런싱(Load Balancing): 클라이언트 요청을 여러 서버에 분산하여 로드 균형을 조정하여 리소스의 속도와 안정성을 향상시킨다.
  • 글로벌 서버 로드 밸런싱(Global Server Load Balancing): 여기에는 클라이언트의 지리적 위치를 기반으로 가장 가까운 서버로 클라이언트 요청을 라우팅하여 사용자 응답 시간을 향상시키는 작업이 포함된다.
  • SSL 암호화(SSL Encryption): SSL 인증서 관리를 개별 서버에서 관리하는 대신 한 곳에서 중앙 집중화한다.
  • 콘텐츠 캐싱(Caching Content): 웹 서버에서 캐시된 정적 및 동적 콘텐츠를 제공하여 서버 로드를 줄인다.
  • 압축(Compression): 파일을 클라이언트에 보내기 전에 압축하여 응답 대역폭을 줄인다.
  • 보안 및 익명성(Security and Anonymity): 백엔드 서버의 특성과 출처를 숨겨 보안을 제공한다.

 

 

Reverse Proxy vs Forward Proxy

Feature Reverse Proxy Forward Proxy
Definition 서버를 대신하여 클라이언트 요청을 처리하고 이를 적절한 백엔드 서버에 배포한다. 클라이언트를 대신하여 외부 서버에 요청을 보낸다.
Typical Usage 서버 인프라를 위한 로드 밸런싱, 보안, 캐싱. 클라이언트 액세스를 위한 네트워크 보안, 개인 정보 보호 및 콘텐츠 필터링.
Client’s View 클라이언트는 일반적으로 역방향 프록시의 존재를 인식하지 못한다. 메인 서버로 나타난다. 클라이언트는 외부 리소스에 액세스하기 위해 명시적으로 정방향 프록시를 사용하도록 구성된다.
Direction of Traffic 클라이언트로부터 들어오는 요청을 수신하여 백엔드 서버로 전달한다. 내부 클라이언트로부터 요청을 받아 외부 서버로 전달합니다.
Location in Network 백엔드 서버 근처, 주로 데이터 센터 내에 배치된다. 클라이언트 장치 근처 또는 네트워크 가장자리(예: 회사 방화벽)에 배치된다.
Primary Purpose 백엔드 서비스의 확장성, 성능, 보안 및 안정성을 향상한다. 클라이언트에게 익명성을 제공하고 콘텐츠를 필터링하며 인터넷 액세스를 제어한다.
Load Balancing 여러 백엔드 서버에서 로드 밸런싱을 수행하는 경우가 많다. 일반적으로 로드 밸런싱을 수행하지 않는다. 주요 목적은 클라이언트 요청을 중계하는 것이다.
Caching 반복되는 클라이언트 요청을 최적화하기 위해 백엔드 서버의 응답을 캐시한다. 자주 액세스하는 인터넷 리소스를 캐시하여 클라이언트의 액세스 속도를 향상시킬 수 있다.
Access Control 백엔드 서버에 대한 액세스를 제어하고 내부 구조를 숨긴다. 종종 정책을 기반으로 외부 리소스에 대한 클라이언트의 액세스를 제어한다.
Common Use Cases 웹 애플리케이션, CDN 및 서비스에서 클라이언트 트래픽을 처리하고 보안을 강화하며 로드 균형을 조정하는 데 사용된다. 클라이언트 인터넷 액세스를 모니터링, 제한 또는 익명화하려는 조직, 학교 또는 네트워크에서 사용된다.

 

  • Reverse Proxy Network
    • 클라이언트는 역방향 프록시에 요청을 보내고, 이 요청은 적절한 백엔드 서버로 전달된다. 역방향 프록시는 클라이언트의 백엔드 인프라를 마스크하고 로드 밸런싱, 캐싱 및 보안을 제공하는 경우가 많다.

 

  • Forward Proxy Network
    • 내부 클라이언트는 정방향 프록시로 요청을 보내고, 이 프록시는 클라이언트를 대신하여 해당 요청을 외부 서버로 전달한다. 정방향 프록시는 보안, 개인정보 보호, 때로는 콘텐츠 필터링을 제공하여 외부 서버로부터 클라이언트를 보호한다.

 

출처 : 머메이드 차트

 

 

 

Reverse Prxoy 도구의 예: Nginx

Nginx는 웹 서버, 로드 밸런서, HTTP 캐시 및 메일 프록시로 사용되는 것 외에도 세계에서 가장 인기 있는 역방향 프록시 서버 중 하나이다. 고성능, 안정성, 풍부한 기능 세트, 간단한 구성 및 낮은 리소스 소비로 잘 알려져 있다.

http {
    upstream backend {
        server backend1.example.com weight=5;
        server backend2.example.com;
        server backend3.example.com;
    }

    server {
        listen 80;

        location / {
            proxy_pass <http://backend>;
            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;
        }
    }
}
  • `upstream backend` 는 서로 다른 가중치를 갖는 서버 백엔드 그룹을 정의한다(지정되지 않은 경우 각각의 가중치는 동일함). 이를 통해 Nginx는 트래픽을 다른 서버로 전달할 뿐만 아니라 가중치가 더 높은 서버에 더 많은 트래픽을 할당함으로써 로드를 분산할 수 있다.
  • `proxy_pass` 지시어는 요청을 업스트림 서버 그룹에 전달한다.
  • `proxy_set_header` 지시문은 백엔드 서버에 전달되는 요청 헤더를 수정합니다. 여기에는 실제 클라이언트 IP 주소 및 기타 세부 정보를 백엔드로 전달하는 것이 포함될 수 있다.

 

 

Reverse Prxoy 도구의 예: Haproxy

global
    log /dev/log local0
    log /dev/log local1 notice
    maxconn 2000
    user haproxy
    group haproxy

defaults
    log global
    mode tcp
    retries 3
    timeout connect 5000
    timeout client 50000
    timeout server 50000

frontend kubernetes-frontend
    bind 10.0.71.50:6443 
    default_backend kubernetes-backend

backend kubernetes-backend
    balance roundrobin
    option tcp-check
    server dh-master-1 10.0.71.51:6443 check fall 3 rise 2
    server dh-master-2 10.0.71.52:6443 check fall 3 rise 2
    server dh-master-3 10.0.71.53:6443 check fall 3 rise 2
  • globaldefaults 섹션:
    • log: 로그 설정을 통해 HAProxy의 로그 정보를 /dev/log에 저장한다.
    • maxconn 2000: 최대 2000개의 연결을 허용한다.
    • mode tcp: TCP 모드로 설정하여 HTTP가 아닌 일반 TCP 연결을 처리하도록 한다.
    • timeout 설정: 클라이언트, 서버, 그리고 연결 시간에 대한 타임아웃을 설정한다.

 

  • frontend kubernetes-frontend:
    • bind 10.0.71.50:6443: HAProxy가 이 IP와 포트(10.0.71.50:6443)에서 클라이언트 요청을 수신한다.
    • default_backend kubernetes-backend: 모든 수신된 요청을 kubernetes-backend로 전달한다.

 

  • backend kubernetes-backend:
    • balance roundrobin: 라운드 로빈 방식으로 요청을 각 백엔드 서버에 순차적으로 분배한다.
    • option tcp-check: 백엔드 서버의 TCP 상태를 주기적으로 확인하여 정상 작동 여부를 모니터링한다.
    • server 설정: dh-master-1, dh-master-2, dh-master-3 세 개의 백엔드 서버에 대해 IP와 포트(10.0.71.51:6443, 10.0.71.52:6443, 10.0.71.53:6443)로 연결을 설정한다. check 옵션은 서버의 상태를 확인하며, fall 3 및 rise 2는 서버 상태 변화를 감지하는 임계치를 설정한다.

 

 


Reference

https://www.cloudflare.com/ko-kr/learning/cdn/glossary/reverse-proxy/

 

https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%B2%84%EC%8A%A4_%ED%94%84%EB%A1%9D%EC%8B%9C

728x90
반응형

'Networking, Security, Protocols' 카테고리의 다른 글

haproxy 개념 및 구성 가이드  (0) 2024.04.09
Cilium이란?  (2) 2024.02.06
Vault 설치와 사용법  (2) 2024.01.24
Curl(Client URL)이란?  (0) 2023.05.26
SSID(Service Set Identifier)란?  (0) 2023.04.05