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
- global 및 defaults 섹션:
- 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 |