GH GambleHub

리버스 프록시 및 라우팅

1) 역 프록시 역할

리버스 프록시-플랫폼의 "전선": TLS를 허용하고 업스트림 간 트래픽을 배포하며 보안 및 성능 정책을 적용합니다. 목표는 최소 대기 시간, 예측 가능한 라우팅 및 열화 인스턴스/영역의 빠른 격리입니다.

2) 레이어 및 프로토콜

L4: 할 수 없습니다. HTTP를 이해하지 않고 저렴한 가격.
L7: HTT/1. 1-2-3, gRPC, 웹 소켓. 리치 라우팅 (호스트, 경로, 헤더, 쿠키), 변환 및 캐시.

TLS 모델: 주변 (NGINX/Envoy) 에서 종료됩니다- mSL/mesh. SNI는 동일한 IP에서 가상 호스트를 허용합니다.

3) 라우팅 전략 (L7)

1. 호스트 기반: 도메인 별 ('api. 브랜드. com '→ cluster' brand-api ').
2. 경로 기반: '/v1/payment '→' payment-svc ', '/v1/wallets' → 'wallets-svc'.
3. 헤더 기반: 'X- 지역: eu-central', 'X-Tenant: 42', '사용자-에이전트 '/' 수락'.
4. 쿠키 기반: A/B 테스트, 끈적 끈적한 세션.
5. 가중/카나리아: 새 버전으로의 트래픽 비율 (1-5% → 100%).
6. Geo/ASN: 국가/ASN별로 가장 가까운 팝/지역으로 전송됩니다.
7. 일관된 해싱: 키 (user _ id/tentent _ id) 를 인스턴스 → 캐시 지역/끈으로 바인딩합니다.
8. 섀도우/미러 링: 응답에 영향을주지 않고 "섀도우" 업스트림으로 트래픽을 복사합니다 (회귀 테스트 용).

4) 밸런싱 및 내결함

알고리즘: 라운드 로빈, 최소 요청, 랜덤, 링 해시 (일관된).
건강 검사: 능동 (상태/지정) + 수동 (코드/타임 아웃 별).
이상 방출: 오류/대기 시간이 증가한 호스트를 일시적으로 "녹아웃" 합니다.

재시도: 시도 당 타임 아웃 및 지터로 제한됩니다. dempotency없이 안전하지 않은 방법을 철회하지 마십시

연결 풀링: 따뜻한 수영장을 업스트림으로 유지하고 최고치를 제한하십시오.

5) 주변 미터 성능

캐싱: 키 (메소드 + 호스트 + 경로 + 바리), 'ETag/If-None-match' 조건, TTL 및 오래된 재발행.
압축: 텍스트 응답을위한 brotli/gzip.
TP/2/3: 멀티플렉싱, 헤더 압축; WAF/IDS 호환성 검증.
요청 연결-동일한 캐시 키에 대한 동시 요청 붕괴.

6) 프록시 보안

TLS: 1. 2 + (1보다 낫습니다. 3), OCSP 스테이플 링, HSTS.
WAF/봇 필터: 앱으로 라우팅하기 전에.
CORS/CSP/Fetch-Metadata: 정책에 따라.
헤더-아이스 (Herder-보조/프로토): 'X-Forwarded-For/Proto', 'Forward', 'traceparent'; 헤더 주입 및 대형 보호.
바디/헤더 제한: DoS 패턴의 경우 413/431 초기.
파트너 통합 및 내부 API를위한 mTLS.

7) 배포 체계: 카나리아/청록색/버전

가중 라우팅 не레벨 7 (1%, 5%, 25%, 50%, 100%).
헤더 게이트: 플래그/헤더 (내부/테스트) 로 기능을 활성화합니다.
청록색: 전체 DNA/경로 전환, 빠른 롤백.
그림자: 메트릭/로그 항목이있는 새 버전의 병렬 실행.

8) 끈적 끈적한 세션 및 해시 라우팅

쿠키 stickiness ('Set-Cookie: SRV = shard-a; 경로 =/; 스테이트로드에 대한 HttpOnly ').
'user _ id/tenent _ id' 로 일관된 링 해시-캐시 교차 장애를 줄입니다.
주의: 쓰기 부하 → 핫스팟에 대한 "영원한" 끈기를 피하십시오. 할당량 테넌트를 사용하십시오.

9) 지역 및 지리 라우팅

가장 가까운 POP를 선택하려면 Anycast + geo-DNS입니다.
테스트 및 디버깅에 대한 헤더 오버라이드 (예: 'X- 지역').
법적으로 요구되는 데이터 현지화 (지역/관할권 별 경로).

10) 관찰 및 통제

RED 메트릭: RPS, 오류율 (클래스 별), 대기 시간 p95/p99 경로/클러스터 당.
이상/건강: 편집/수정 횟수, 느린 통화 속도.
통나무: PII가없는 구조화; 상관 관계 'trace _ id '/' span _ id'.
추적 (OTel): 스팬 입력 → 라우터 → 업스트림; p99 그래프의 예.

11) 설정 예

11. 1 NGINX: 호스트/경로/가중 + 치

nginx map $http_x_canary $canary { default 0; "1" 1; }
upstream app_v1 { least_conn; server 10. 0. 0. 1:8080 max_fails=3 fail_timeout=10s; }
upstream app_v2 { least_conn; server 10. 0. 0. 2:8080; }

server {
listen 443 ssl http2;
server_name api. example. com;

Кэш proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=apicache:256m max_size=10g inactive=10m use_temp_path=off;

location /v1/ {
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Request-ID $request_id;
proxy_read_timeout 300ms; proxy_connect_timeout 100ms;

Weighted: 5% on v2 if canary = 1, otherwise 0%
set $backend app_v1;
if ($canary) { set $backend app_v2; }
proxy_pass http://$backend;
}

Static with cache location/assets/{
proxy_cache apicache;
proxy_cache_valid 200 10m;
add_header Cache-Control "public, max-age=600";
proxy_pass http://static_cluster;
}
}

11. 2 특사: 헤더 라우팅, 카나리아, 특이 치 배출, 미러링

yaml static_resources:
clusters:
- name: svc_v1 type: STRICT_DNS lb_policy: LEAST_REQUEST outlier_detection:
consecutive_5xx: 5 interval: 5s base_ejection_time: 30s max_ejection_percent: 50
- name: svc_v2 type: STRICT_DNS lb_policy: LEAST_REQUEST
- name: mirror_svc type: STRICT_DNS

listeners:
- name: https filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
route_config:
virtual_hosts:
- name: api domains: ["api. example. com"]
routes:
- match:
prefix: "/v1"
headers:
- name: "X-Region"
exact_match: "eu"
route:
cluster: svc_v1 timeout: 350ms retry_policy:
retry_on: connect-failure,reset,5xx num_retries: 1 per_try_timeout: 200ms request_mirror_policies:
- cluster: mirror_svc runtime_key: mirror. enabled
- match: { prefix: "/v1" }
route:
weighted_clusters:
clusters:
- name: svc_v1 weight: 95
- name: svc_v2 weight: 5

11. 3 Traefik: 규칙 + 미들웨어

yaml http:
routers:
api:
rule: "Host(`api. example. com`) && PathPrefix(`/v1`)"
service: svc middlewares: [hsts, compress]
middlewares:
hsts:
headers:
stsSeconds: 31536000 stsIncludeSubdomains: true compress:
compress: {}
services:
svc:
weighted:
services:
- name: v1 weight: 95
- name: v2 weight: 5

11. 4 Kubernetes: 카나리아를위한 Ingress + manifesto (NGINX Ingress)

yaml apiVersion: networking. k8s. io/v1 kind: Ingress metadata:
name: api annotations:
nginx. ingress. kubernetes. io/canary: "true"
nginx. ingress. kubernetes. io/canary-weight: "5"
spec:
rules:
- host: api. example. com http:
paths:
- path: /v1 pathType: Prefix backend:
service:
name: svc-v1 port: { number: 8080 }

12) 변환 및 호환성

헤더/경로의 정규화, '위치' 인구 조사, '캐시 제어' 제어.
번역기 (grpc-json-transcoder) 를 통한 gRPC https/JSON.
WebSocket/HTTP2 업그레이드-프록시가 'Upgrade '/' Connection' 을 건너 뛰고 있는지 확인하십시오.

13) 테스트 및 혼돈 시나리오

로딩: 버스트, 긴 고원, "긴" 바디 (slow-POST).
업스트림 → 재 시도/타임 아웃/이상 검사에 대한 지연/손실 주입.
카나리아 메트릭: p95/p99, 새 버전의 오류율 대 이전 버전; SLO에 의한 자동 롤백.
그림자: 응답 (샘플링) 과 나란히 논리의 비교.

14) 안티 패턴

dempotency 및 마감일을 제외한 글로벌 휴양지 → 복식과 폭풍.
핫 샤드가없는 끈적한 세션은 → 부하 왜곡을 제어합니다.
건강 검진 부족/특이 치 배출 → 수영장에서 "썩은" 인스턴스.
무제한 헤더/바디 → 가장 간단한 DoS.
스키마 버전없이 변환 및 보안 혼합 → 예기치 않은 회귀.
'Vary' → 잘못된 응답이없는 단일 글로벌 키 캐시.

15) iGaming/Finance의 세부 사항

지역: 플레이어/브랜드 관할권별 라우팅; 결제 구역 격리.
중요한 경로 (예금/출력): 짧은 타임 아웃, 하나의 반복, dempotency; 개별 클러스터.
PSP/KYC: 전용 업스트림 풀, 엄격한 재 시도/시간 초과 정책, 회로 차단기, 지오 핀.
AB 채널: 읽기 경로에 대해서만 지불/제한을 사용한 안전한 실험; 깃발과 작은 비율을 통해 쓰십시오.

16) Prod 준비 점검표

  • TLS 1. 2+/1. 3, OCSP 스테이플 링, HSTS; 올바른 'X- 포워드'.
  • 명확한 라우팅 규칙: 호스트/경로/헤더/쿠키; 문서.
  • 건강 검진, 특이 치 배출, 시도 당 시간 초과, 제한된 배송.
  • 가중/카나리아 + 그림자; SLO/경고에 의한 자동 롤백.
  • 캐시/압축/ETag; 바디/헤더 제한; 합병을 요청하십시오.
  • 'trace _ id' 가있는 로그/트레일; RED + 특이 치/건강 지표; 경로/클러스터 당 대시 보드.
  • WAF/봇 필터/CORS; 대형 및 느린 POST 보호.
  • 필요한 경우 끈적 끈적한/일관된 해싱; 핫 샤드 제어.
  • 구성은 다양하고, 마이그레이션은 안전하며, KMS/Vault의 비밀입니다.

17) TL; DR

주변에서 TLS를 종료하고 호스트/경로/헤더/쿠키를 통해 L7로 경로를 지정하십시오. 릴리스 - 가중 카나리아 및 그림자; 안정성-건강 검진, 특이 치 배출, 시도 당 타임 아웃으로 제한된 재 시도. p95를 향상시키는 데 캐시, 압축 및 일관된 해싱을 사용하십시오. 측정 RED 신호 및 클러스터 상태는 WAF 및 크기 제한을 유지합니다. 중요한 결제 경로-별도의 클러스터, 짧은 SLA 및 retras/idempotency의 엄격한 관리.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.