프록시 레이어 및 역 라우팅
간략한 요약
프록시 레이어는 플랫폼의 "프론트 버스" 입니다. TLS를 완료하고 클라이언트를 인증하며 트래픽을 분배하며 피크를 부드럽게하며 릴리스를 안전하게 만듭니다 (카나리아, 청록색). 최소 성숙도 설정: 프록시 역할의 명확한 계층화, 결정 라우팅 규칙, 타임 아웃/리트레이 제어, 캐시 + 속도 제한, 엔드 투 엔드 관찰 및 자동화.
프록시 분류법
순방향 프록시-외부 클라이언트/서비스의 아웃 바운드 트래픽 (출구), 필터/미러링, DLP.
리버스 프록시-외부 요청 및 백엔드 경로 (주요 초점) 를 허용합니다.
1. Edge/CNC/WAF (애니 캐스트, 봇 필터, 캐시)
2. L7 Ingress/API 게이트웨이 (라우팅, 인증, 정책)
3. 동서, mSL 및 Retras 용 서비스 계층/메시 (사이드카)
4. 아웃 바운드 통합을위한 탈출 게이트웨이 (PSP, 파트너)
라우팅 (L4/L7) 및 알고리즘
(PHP 3 = 3.0.6, PHP 4)
(PHP 3 = 3.0.6, PHP 4) (PHP 3 = 3.0.6, PHP 4)
알고리즘:- 라운드 로빈/최소 연결/EWMA-일반적인 경우.
- 일관된 해시 (쿠키/식별자 별) - 끈적 끈적한 세션 및 캐시 지역.
- Header-/Geo-/Latency 기반-지역/공급자 별 타겟팅, 빠른 PoP.
- 카나리아/가중-단계별 롤아웃 (5 → 25 → 50 → 100%).
- Shadow/Mirroring-응답에 영향을주지 않고 새 서비스로의 트래픽 사본.
쿼리/응답 변환
다시 쓰기/리디렉션: 경로 통합, 버전 지정 ('/v1/→/svc/v1/').
헤더: 'X-Forwarded-For/Proto/Host' 를 정규화하고 'traceparent '/' x-quir-id' 를 추가하고 불필요하게 필터링하십시오.
CORS/CSRF: 게이트웨이에서 중앙 집중화하면 모든 서비스에서 설정이 생성되지 않습니다.
압축/감압: Brotli/gzip, 유형별 제어.
속도 제한/대형 헤더에 대한 신체 제한 및 보호.
인증 및 보안
TLS 1. 외부 전선의 3 + OCSP 스테이플링 + HSTS.
mSL: 관리자, 운영 API, 파트너 채널.
OAuth2/OIDC: 게이트웨이 (토큰 내성/JWT 확인) 를 통한 인증 → 업스트림 클레임으로 전달.
교차 서비스 및 파트너 통합을위한 API 키/서명 (HMAC).
WAF/봇 필터: 서명 + 행동 규칙, 그레이 패스/캡차.
CSP/X-Frame-Options/Referrer-Policy-가장자리의 보안 헤더.
신뢰성: Retras/Timeout/TT
시간 초과: 단일 정책 인 L4/L7에서 연결/읽기/쓰기 (예: API의 경우 '500ms', '읽기 3-5s').
배상: demempotent ('GET/HEAD'), 시간/수량 제한, '재시도 예산' 만 있습니다.
회로 차단기: 동시 요청/오류, 빠른 고장 및 저하에 대한 제한.
이상 탐지-수영장에서 나쁜 인스턴스를 제외합니다.
Backoff + jitter: "무리 효과" 를 만들지 않기 위해.
캐시 및 트래픽 관리
캐시 L7: 정적/반 역학 (카탈로그, 구성), 's-maxage' + '부실한 동안 계시'.
속도 제한/쿼터: IP/ASN/장치/쿠키, 분산 카운터 (Redis/Rate-service).
끈적 끈적한 세션: 쿠키/일관된 해시; 실패와 "재 붙여 넣기" 를 고려하십시오.
붕괴 요청 (dedupe): 동일한 GET의 "폭풍" 으로부터 원점을 보호합니다.
프로토콜 및 기능
TP/2: 멀티플렉싱, 우선 순위; 'ALPN: h2' 를 유지하십시오.
TP/3/QUIC: 손실/지터 저항; UDP/443을 열고 MTU/PMTUD를 모니터링하십시오.
gRPC: 건강 점검, 스트리밍, 마감일; 프록시는 'grpc 상태' 를 지원해야합니다.
웹 소켓/SSE: 오래 지속되는 연결, 유능한 유휴 시간 초과 및 제한.
관찰 가능성 및 SLO
메트릭:- L4/L7: 'p50/p95/p99', о지정 ('4xx/5xx/Grpc 코드'), '열린 _ conns', 'CPS/RPS', '재 시도 _ rate'.
- TLS: 버전/암호, p95 핸드 셰이크, 재개.
- 경로: 경로/클러스터 별 공유, 특이 치 배출.
- 속도 제한/WAF: 트리거/FP 속도.
- 로그: 액세스 (PII 없음), 라우팅 이유, 추적 헤더.
- 흔적: '추적 가능 '/B3, 샘플링.
- p95 TTFB API λ250-300 ms; 오류 L7 λ0. 5%.
- 카나리아의 성공 (메트릭의 저하없이) 출시의 99% 이상.
- FP- 레이트 WAF λ0. 1%.
전형적인 구성 요소
Nginx (리버스 프록시, STP/2, 카나리아, 압축)
nginx map $http_x_canary $upstream_pool {
default "stable";
~^1$ "canary";
}
upstream api_stable { zone zst 64k; server 10. 0. 1. 10:8443; server 10. 0. 1. 11:8443; keepalive 256; }
upstream api_canary { zone zcn 64k; server 10. 0. 2. 10:8443; keepalive 64; }
server {
listen 443 ssl http2 reuseport;
server_name api. example. com;
ssl_protocols TLSv1. 2 TLSv1. 3;
ssl_stapling on; ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=31536000" always;
basic limits/protection client_max_body_size 10m;
sendfile on; brotli on; gzip on;
location / {
proxy_http_version 1. 1;
proxy_set_header Host $host;
proxy_set_header X-Request-Id $request_id;
proxy_set_header X-Forwarded-Proto https;
proxy_connect_timeout 500ms;
proxy_read_timeout 5s;
proxy_next_upstream error timeout http_502 http_503 http_504;
proxy_next_upstream_tries 1; # Retrays are limited to proxy_pass https://api_$upstream_pool;
}
}
HAProxy (JWT 확인 + mTLS에서 백엔드 + 속도 제한)
haproxy frontend fe_https bind:443 ssl crt /etc/haproxy/certs/ alpn h2,http/1. 1 http-request set-header X-Request-Id %[unique-id]
http-request lua. jwt_verify # external verification script JWT stick-table type ip size 1m expire 10m store http_req_rate (10s)
http-request deny if { src_http_req_rate(10s) gt 100 }
default_backend be_api
backend be_api balance roundrobin option httpchk GET /healthz server s1 10. 0. 1. 10:8443 check ssl verify required ca-file /etc/haproxy/ca. pem server s2 10. 0. 1. 11:8443 check ssl verify required ca-file /etc/haproxy/ca. pem
특사 (JWT + 가중 경로 + 이상 감지)
yaml static_resources:
listeners:
- name: https address: { socket_address: { address: 0. 0. 0. 0, port_value: 443 } }
filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. network. http_connection_manager. v3. HttpConnectionManager stat_prefix: ingress route_config:
virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match: { prefix: "/" }
route:
weighted_clusters:
clusters:
- { name: api-stable, weight: 95 }
- { name: api-canary, weight: 5 }
http_filters:
- name: envoy. filters. http. jwt_authn typed_config: { "@type": type. googleapis. com/envoy. extensions. filters. http. jwt_authn. v3. JwtAuthentication }
- name: envoy. filters. http. router clusters:
- name: api-stable connect_timeout: 0. 5s type: STRICT_DNS lb_policy: ROUND_ROBIN outlier_detection: { consecutive_5xx: 3, interval: 2s, base_ejection_time: 30s }
transport_socket:
name: envoy. transport_sockets. tls
- name: api-canary connect_timeout: 0. 5s type: STRICT_DNS lb_policy: ROUND_ROBIN transport_socket:
name: envoy. transport_sockets. tls
Traefik (규칙 기반 경로, 개념)
yaml http:
routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1/`)"
service: api-svc tls: { certResolver: letsencrypt }
services:
api-svc:
loadBalancer:
servers:
- url: "https://10. 0. 1. 10:8443"
- url: "https://10. 0. 1. 11:8443"
프록시 성능
백엔드에 연결 풀링과 키프 라이브, 인스턴스 당 연결 제한.
Reuseport, 핀 CPU/IRQ, 충분한 소켓 버퍼.
TLS: ECDA + 짧은 체인, 재개는 70% 이상, SHT/2/3이 활성화되었습니다.
"핫" 응답에 대한 프록시 캐시 (304 검증 포함).
워밍업: 피크 전에 DNA/TLS/연결 예열.
DR 및 내결함
저하 된 노드의 자동 제거 ('이상 배출').
건강 검진 L4/L7 (신체 버전 토큰).
실패/실패-결제/중요 경로를 의식적으로 선택하십시오.
트래픽을 새 서비스로 전환하기 전에 섀도우 모드.
런북: "클러스터 붕괴", "리디렉션 루프", "연결 누출", "재 트레이 폭풍".
구현 체크리스트
- 층화: Edge → Ingress/API-GW → Mesh/Egress, 역할 및 책임.
- 경로 정책: 호스트/경로/헤더/무게, 카나리아/청록색, 그림자.
- 보안: TLS 1. 3, 민감한 경로를위한 mTLS, JWT/OAuth2, WAF.
- 타임 아웃/배상/CB: 균일 한 값, demotency, 다시 시도 예산.
- 적절한 경우 캐시/속도 제한/요청 붕괴.
- 관찰 가능성: 메트릭/로그/트레일, 상관 식별자.
- SLO: p95/오류/리소스; 경계 오류에 대한 경고.
- IaC/GitOps: 저장소 프록시 구성, 카나리아 릴리스, 빠른 롤백.
- 테스트: e2e 경로, 혼돈 스크립트, 이벤트 전로드.
공통 오류
역할 분리 → 복잡한 RCA 및 높은 폭발 반경이없는 "매직" 프록시 수확기.
비 등급의 쿼리에 대한 배상 → 중복 트랜잭션.
머리글자를 정규화하지 않습니다. → 캐시 중독 및 나쁜 키.
실패 계획이없는 끈적 끈적한 세션 → 열악한 인스턴스를 고수합니다.
누락 된 'traceparent '/' x-quir-id' → 는 문제와 관련이 없습니다.
프록시 레벨에서 하드 301/302 → 루프 및 API 버전 제어 손실.
iGaming/fintech 특정
결제/PSP: mSL, 엄격한 타임 아웃, dememotent 키, IP/ASN 화이트리스트가있는 전용 출구 게이트웨이.
봉우리 (일치/토너먼트): 봇을위한 카나리아/가중, 회색 경로, 공격적인 GET 캐시, "폭풍" 에 대한 원산지 방어.
규정/로깅: 감사 로그의 정책 버전 및 경로 이유를 수정합니다. PII를 최소화하십시오.
콘텐츠 제공 업체: 캐시 지역 및 배포를위한 공급자 별 일관된 해시.
미니 플레이 북
1) 카나리아 API 릴리스
1. 'api-canary' 에 5% 중량 포함; 2) p95/오류 모니터링; 3) 점유율 확대; 4) 분해 중 자동 롤백.
2) 열화 된 노드의 비상 제거
1. 이상 배출 또는 수동 '배수'; 2) 캐시의 수영장 및 적중 점검; 3) 사후 RCA.
3) 기능 미러링
1. 응답에 영향을주지 않고 그림자를 2) 지표/응답 diff를 비교하고; 3) 전환을 결정하십시오.
4) 재 트레이 폭풍
1. 재 시도 예산/시간 제한을 줄입니다. 2) 요청 붕괴 가능; 3) 로컬 스터브/캐시; 4) 기원을 안정화시킨다.
결과
잘 설계된 프록시 계층은 역할 분리, 결정 론적 라우팅, 신뢰할 수있는 정책 (타임 아웃/배상/CB), 보안 (mSL/JWT/WAF) 및 관찰 가능성입니다. IaC에 핀 구성, 카나리아 및 섀도우 사용, SLO 측정-플랫폼은 가장 뜨거운 피크 시간에도 확장 가능하고 예측 가능하며 안전합니다.