GH GambleHub

Warstwy proxy i odwrotna trasa

Krótkie podsumowanie

Warstwa proxy jest „autobusem przednim” platformy: wypełnia TLS, poświadcza klientów, rozprowadza ruch, wygładza szczyty i sprawia, że uwolnienie bezpieczne (kanary, niebiesko-zielony). Minimalny zestaw dojrzałości: wyraźne rozwarstwienie ról proxy, deterministyczne zasady routingu, kontrola timeout/retray, cache + rate-limit, obserwowalność na koniec i automatyzacja.

Taksonomia proxy

Forward proxy - ruch wychodzący klientów/usług na zewnątrz (egress), filtry/lusterka, DLP.
Odwrócony proxy - akceptuje zewnętrzne żądania i trasy do backendów (nasz główny cel).

Warstwy w ścieżce produkcyjnej:

1. Krawędź/CDN/WAF (Anycast, filtry bot, pamięć podręczna)

2. L7 Ingress/API-gateway (routing, uwierzytelnianie, zasady)

3. Warstwa serwisowa/siatka (siatka boczna) dla wschód-zachód, mTLS i Retras

4. Brama wyjazdowa dla integracji wyjazdowych (PSP, partnerzy)

Routing (L4/L7) i algorytmy

L4 (TCP/UDP, passthrough TLS): minimalne opóźnienie, bez zrozumienia HTTP.
L7 (HTTP/1. 1, HTTP/2, HTTP/3/gRPC): host/path/header/cookie rules, transformation, WAF, cache.

Algorytmy:
  • Round-robin/Least-connections/EWMA - wspólne przypadki.
  • Consistent-hash (przez plik cookie/identyfikator) - lepkie sesje i lokalizacja pamięci podręcznej.
  • Header-/Geo-/Latency - ukierunkowane według regionu/dostawcy, szybkie PoP.
  • Kanaryjski/Ważony - stopniowy wałek (5 → 25 → 50 → 100%).
  • Shadow/Mirroring - kopia ruchu do nowej usługi bez wpływu na odpowiedzi.

Transformacja zapytań/odpowiedzi

URL rewrite/redirect: ujednolicenie ścieżek, wersioning ('/v1/→/svc/v1/').
Nagłówki: znormalizować 'X-Forwarded-For/Proto/Host', dodać 'traceparent'/' x-request-id', filtr niepotrzebny.
CORS/CSRF: scentralizować w bramie, nie produkować ustawień w każdej usłudze.
Kompresja/dekompresja: Brotli/gzip, kontrola według typu.
Limity ciała i ochrona przed slowloris/oversized headers.

Uwierzytelnianie i bezpieczeństwo

TLS 1. 3 + zszywanie OCSP + HSTS na frontach zewnętrznych.
mTLS: administratorzy, API operacyjne, kanały partnerskie.
OAuth2/OIDC: authorization via gateway (token introspection/JWT-verify) → przekazanie do roszczeń w upstream.
Klucze/podpisy API (HMAC) do integracji między usługami i partnerami.
Filtry WAF/bot: podpisy + zasady zachowania, greypass/captcha.
CSP/X-Frame-Options/Referrer-Policy - nagłówki zabezpieczeń na krawędzi.

Niezawodność: Retras/Timeouts/TT

Timeouts: connect/read/write on the L4/L7, single policy (na przykład, "connect 500ms", "read 3-5s' dla API).
Przekłady: tylko idempotent („GET/HEAD”), limit czasu/ilości, „retry-budget”.
Wyłącznik: ograniczenia dotyczące jednoczesnych żądań/błędów, szybkiej awarii i degradacji.
Wykrywanie zewnętrzne - wyklucza złe przypadki z puli.
Backoff + jitter: aby nie tworzyć „efektu stada”.

Zarządzanie pamięcią podręczną i ruchem

Cache L7: statyczny/półdynamiczny (katalogi, konfiguracje), 's-maxage' + 'stale-while-revalidate'.
Limit stawek/Kontyngent: przez IP/ASN/device/cookie, rozproszony licznik (Redis/Rate-service).
Sesje lepkie: cookie/consistent-hash; rozważyć niepowodzenie i „ponowne wklejenie”.
Zawalenie żądania (dedupe): zabezpieczenie pochodzenia przed „burzą” identycznych BP.

Protokoły i funkcje

HTTP/2: multipleksowanie, priorytety; posiadać „ALPN: h2”.
HTTP/3/QUIC: odporność na straty/jitter; otwórz UDP/443, monitoruj MTU/PMTUD.
gRPC: kontrole zdrowotne, streaming, terminy; pełnomocnicy muszą obsługiwać 'status grpc'.
WebSocket/SSE: długotrwałe połączenia, kompetentne czasy bezczynności i ograniczenia.

Obserwowalność i SLO

Metryka:
  • L4/L7: 'p50/p95/p99', обика ('4xx/5xx/Grpc-codes'), 'open _ conns', 'CPS/RPS', 'retry _ rate'.
  • TLS: wersja/szyfry, uścisk dłoni p95, wznowienie.
  • Routing: akcje na trasie/klastrze, wytrącania z rynku.
  • Limit stawki/WAF: wyzwalacze/szybkość FP.
  • Dzienniki: dostęp (bez PII), powody routingu, nagłówki śladowe.
  • Ślady: "traceparent'/B3, pobieranie próbek.
SLO (przykłady):
  • p95 TTFB API ≤ 250-300 ms; błąd L7 ≤ 0. 5%.
  • Sukces kanarów (bez degradacji metryk) ≥ 99% startów.
  • Szybkość FP WAF ≤ 0. 1%.

Typowe konfiguracje

Nginx (odwrotny proxy, HTTP/2, kanaryjski, kompresja)

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-verify + mTLS do backend + rate-limit)

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

Wysłannik (JWT + ważone trasy + wykrywanie zewnętrzne)

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 (trasy oparte na zasadach, koncepcja)

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"

Wydajność proxy

Łączenie połączeń i utrzymywanie ich przy użyciu, limit połączeń na instancję.
Reuseport, pin CPU/IRQ, wystarczające gniazda buforowe.
TLS: ECDSA + krótkie łańcuchy, wznowienie ≥ 70%, HTTP/2/3 włączone.
Pamięć podręczna w serwerze proxy dla „gorących” odpowiedzi (w tym 304-walidacja).
Rozgrzewka: ocieplenie DNS/TLS/połączenia przed szczytami.

DR i tolerancja uszkodzeń

Automatyczne usuwanie zdegradowanych węzłów („wyrzut zewnętrzny”).
L4/L7 kontroli zdrowia (token w wersji na ciało HTTP).
Fail-open/Fail-closed - wybierz świadomie ścieżki płatnicze/krytyczne.
Tryb cienia przed przełączeniem ruchu do nowej usługi.
Runbooks: „cluster collapse”, „redirect loop”, „connection leaks',” retray storm'.

Lista kontrolna implementacji

  • Stratyfikacja: Edge → Ingress/API-GW → Siatka/Egress, role i obowiązki.
  • Zasady routingu: host/path/header/weight, canary/blue-green, shadow.
  • Bezpieczeństwo: TLS 1. 3, mTLS dla wrażliwych ścieżek, JWT/OAuth2, WAF.
  • Timeouts/Retrays/CB: jednolite wartości, idempotence, retry-budget.
  • W stosownych przypadkach cache/rate-limit/request-collapsing.
  • Obserwowalność: mierniki/kłody/ścieżki, identyfikatory korelacji.
  • SLO: p95/błędy/zasoby; wpisy do awarii obwodu.
  • IaC/GitOps: konfiguracje serwera proxy repozytorium, wydania kanarkowe, szybki rollback.
  • Testy: trasy e2e, skrypty chaosu, załadunek przed zdarzeniami.

Częste błędy

„Magiczny” kombajn proxy bez separacji ról → kompleks RCA i wysoki promień wybuchu.
Przekłada się na pytania nieidempotentne → duplikaty transakcji.
Brak nagłówka/URL normalizacji → zatrucie pamięci podręcznej i złe klucze.
Lepkie sesje bez planów awaryjnych → trzymanie się zdegradowanej instancji.
Brak 'traceparent'/' x-request-id' → nie może skorelować problemów.
Twardy 301/302 na poziomie proxy → pętle i utrata kontroli wersji API.

iGaming/specyficzne dla fintechu

Płatności/PSP: dedykowane wyjście-gateway z mTLS, ścisłe timeouts, idempotent keys, IP/ASN whitelists.
Szczyty (mecze/turnieje): kanaryjskie/ważone, szare trasy dla botów, agresywne buforowanie GET, obrona pochodzenia przed „burzą”.
Regulacja/rejestrowanie: ustalić wersje polityki i przyczyny trasy w dziennikach kontroli; zminimalizować PII.
Dostawcy treści: spójny-hash przez dostawcę klucz do lokalizacji pamięci podręcznej, a nawet dystrybucji.

Mini playbooks

1) Kanaryjskie wydanie API

1. Dodać 5% masy na „api-canary”; 2) p95/monitorowanie błędów; 3) rozszerzyć udział; 4) auto-rollback podczas degradacji.

2) Awaryjne usunięcie zdegradowanego węzła

1. Wyjście lub ręczne „drenaż”; 2) sprawdzenie puli i trafienia pamięci podręcznej; 3) RCA po incydencie.

3) Lusterko funkcyjne

1. Włącz cień bez wpływu na reakcje; 2) porównać mierniki/odpowiedzi diff; 3) zdecyduje się na zmianę.

4) Burza retray

1. skrócenie terminów ponownej próby budżetu; 2) umożliwia zawalenie żądania; 3) miejscowe stubs/cache; 4) ustabilizować pochodzenie.

Wynik

Dobrze zaprojektowana warstwa proxy to separacja ról, routing deterministyczny, zaufane zasady (timeouts/retrays/CB), bezpieczeństwo (mTLS/JWT/WAF) i obserwowalność. Konfiguracje pinów do IaC, korzystaj z kanarów i cienia, mierz SLO - a Twoja platforma będzie skalowalna, przewidywalna i bezpieczna nawet w najgorętszych godzinach szczytu.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.