Қабатҳои прокси ва масири баръакс
Хулосаи мухтасар
Қабати прокси "автобуси пеши" платформа аст: он TLS-ро ба итмом мерасонад, муштариёнро тасдиқ мекунад, трафикро тақсим мекунад, қуллаҳоро ҳамвор мекунад ва озодкуниро бехатар мекунад (канарейкаҳо, кабуд-сабз). Маҷмӯи ҳадди ақали камолот: стратификатсияи дақиқи нақшҳои прокси, қоидаҳои масири муайянкунанда, назорати вақт/бозгашт, кэш + меъёри маҳдудият, мушоҳидаи ниҳоӣ ва автоматизатсия.
Прокси таксономия
Прокси пешрафта - трафики берунаи муштариён/хидматҳо берун аз (egress), филтрҳо/оинаҳо, DLP.
Прокси баръакс - дархостҳо ва хатсайрҳои берунаро барои пуштибонӣ қабул мекунад (диққати асосии мо).
1. Edge/CDN/WAF (Anycast, филтрҳои бот, кэш)
2. L7 Ingress/API-дарвоза (масир, аутентификатсия, сиёсат)
3. Қабати хидматрасонӣ/Mesh (sidecar) барои шарқу ғарб, m: TLS ва Retras
4. Egress-дарвоза барои ҳамгироии берунӣ (PSP, шарикон)
Масир (L4/L7) ва алгоритмҳо
L4 (TCP/UDP, гузаргоҳи TLS): таъхири ҳадди аққал, бидуни фаҳмидани HTTP.
L7 (HTTP/1. 1, HTTP/2, HTTP/3/GRPC): қоидаҳои мизбон/роҳ/сарлавҳа/куки, тағирот, WAF, кэш.
- Робин-робин/Пайвастҳои камтарин/EWMA - ҳолатҳои маъмул.
- Пайваста-ҳаш (бо куки/идентификатор) - ҷаласаҳои часпанда ва маҳалли кэш.
- Header-/Geo-/Latency-асоси - ҳадаф аз ҷониби минтақа/провайдер, ТҶ-ҳои зуд.
- Canary/Weighted - иҷрои марҳила ба марҳила (5 → 25 → 50 → 100%).
- Соя/Зеркало - нусхаи трафик ба хидмати нав бидуни таъсир ба посухҳо.
Табдилдиҳии дархост/посух
URL аз нав сабт кардан/равона кардан: муттаҳид кардани роҳҳо, санҷиш ('/v1/→/svc/v1/').
Сарлавҳаҳо: 'X-Forwarded-For/Proto/Host' -ро муқаррар кунед, 'traceparent '/' x-request-id' -ро илова кунед, филтрро нолозим кунед.
CORS/CSRF: дар дарвоза мутамарказ шавед, дар ҳар як хидмат танзимот истеҳсол накунед.
Фишурдасозӣ/Декомпрессия: Brotli/gzip, назорат аз рӯи намуд.
Маҳдудиятҳои бадан ва муҳофизат аз slowloris/сарлавҳаҳои калонҳаҷм.
Аутентификатсия ва амният
TLS 1. 3 + stapling OCSP + HSTS дар ҷабҳаҳои беруна.
MTLS: маъмурон, API-ҳои амалиётӣ, каналҳои шарикӣ.
OAuth2/OIDC: иҷозат тавассути дарвоза (introspection/JWT-verify) → интиқол ба даъвоҳо дар болооб.
API Калидҳо/Имзоҳо (HMAC) барои ҳамгироии хизматрасонӣ ва шарикӣ.
Филтрҳои WAF/бот: имзоҳо + қоидаҳои рафтор, greypass/captcha.
CSP/X-Frame-Options/Referrer-Policy - сарлавҳаҳои амният дар канор.
Эътимоднокӣ: Retras/Timeouts/TT
Вақтсанҷҳо: пайвастшавӣ/хондан/навиштан дар L4/L7, сиёсати ягона (масалан, '500 м пайваст кунед', 'барои API 3-5s хонед).
Бозёфтҳо: танҳо idempotent ('GET/HEAD'), маҳдудияти вақт/миқдор, 'retry-budget'.
Қатъи гардиш: маҳдудиятҳо барои дархостҳо/хатогиҳои ҳамзамон, нокомии зуд ва таназзул.
Муайянкунии берунӣ - ҳолатҳои бадро аз ҳавз хориҷ мекунад.
Backoff + jitter: то ки "эффекти галаи" эҷод нашавад.
Кэш ва идоракунии ҳаракат
Кэш L7: статикӣ/нимҷазира (каталогҳо, конфигуратсияҳо), 's-maxage' + 'кӯҳна-дар ҳоле ки-таҷдиди назар'.
Меъёри лимит/квота: аз ҷониби IP/ASN/дастгоҳ/куки, ҳисобкунаки тақсимшуда (Redis/Rate-service).
Ҷаласаҳои часпанда: куки/пайваста-ҳаш; баррасии нокомӣ ва "дубора гузоштан".
Пошхӯрии дархост (dedupe): муҳофизати пайдоиш аз "тӯфон" -и GET-ҳои шабеҳ.
Протоколҳо ва хусусиятҳо
HTTP/2: мултиплексинг, афзалиятҳо; 'ALPN: h2' нигоҳ доред.
HTTP/3/QUIC: муқовимати гум/ҷиттер; UDP/443 кушоед, MTU/PMTUD-ро назорат кунед.
GRPC: муоинаи тиббӣ, ҷараён, мӯҳлатҳо; шахсони боэътимод бояд 'grpc-status' -ро дастгирӣ кунанд.
Web-Socket/SSE: пайвастҳои дарозмуддат, мӯҳлатҳои бекорхобида ва маҳдудиятҳо.
Мушоҳида ва SLO
Нишондиҳандаҳо:- L4/L7: 'p50/p95/p99', ошибки ('4xx/5xx/Grpc-рамзҳо'), 'open _ conns', 'CPS/RPS', 'retry _ rate'.
- TLS: версия/шифр, дастнависи p95, дубора.
- Масир: саҳмияҳо аз рӯи масир/кластер, баровардани берунӣ.
- Меъёри маҳдудият/WAF: триггерҳо/FP-меъёри.
- Гузоришҳо: дастрасӣ (бидуни PII), сабабҳои масир, сарлавҳаҳои пайгирӣ.
- Нишонаҳо: 'пайгирӣ '/B3, интихоб.
- p95 TTFB API ≤ 250-300 мс; хато L7 ≤ 0. 5%.
- Муваффақияти канарейкаҳо (бе таназзули ченакҳо) ≥ 99% роҳандозӣ.
- FP-меъёри WAF ≤ 0. 1%.
Конфигуратсияҳои маъмулӣ
Nginx (прокси баръакс, HTTP/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;
}
}
HAP-roxy (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
Трефик (хатсайрҳои қоидаҳо, консепсия)
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, PIN CPU/IRQ, буферҳои кофии васл.
TLS: ECDSA + занҷирҳои кӯтоҳ, барқароршавӣ ≥ 70%, фаъол HTTP/2/3.
Кэш дар прокси барои посухҳои "гарм" (аз ҷумла 304-тасдиқ).
Гармкунӣ: гарм кардани DNS/TLS/пайвастҳо пеш аз қуллаҳо.
ДР ва таҳаммулпазирии гуноҳ
Худкоркунии гиреҳҳои таназзулёфта ('outlier-ejection').
Санҷиши саломатӣ (HTTP-нусхаи бадан).
Fail-open/Fail-пӯшида - огоҳона барои пардохт/роҳҳои муҳим интихоб кунед.
Ҳолати соя пеш аз гузаштани трафик ба хидмати нав.
Китобчаҳо: "пошхӯрии кластер", "ҳалқаи равона", "ихроҷи пайвастшавӣ", "тӯфони бозгашт".
Рӯйхати назоратии татбиқ
- Стратификатсия: Edge → Ingress/API-GW → Mesh/Egress, нақшҳо ва масъулиятҳо.
- Сиёсати масир: мизбон/роҳ/сарлавҳа/вазн, канарӣ/кабуд-сабз, соя.
- Амният: TLS 1. 3, mTLS барои роҳҳои ҳассос, JWT/OAuth2, WAF.
- Вақтсанҷӣ/Бозгашт/CB: арзишҳои ягона, номутобиқатӣ, буҷети такрорӣ.
- Кэш/Меъёри маҳдудият/Дар ҳолати зарурӣ шикастани дархост.
- Мушоҳидаҳо: ченакҳо/гузоришҳо/роҳҳо, идентификаторҳои коррелятсия.
- SLO: p95/хатогиҳо/захираҳо; ҳушдор дар бораи нокомии периметр.
- Ia
- Санҷишҳо: хатсайрҳои e2e, скриптҳои бетартибӣ, сарборӣ пеш аз рӯйдодҳо.
Хатогиҳои умумӣ
Ҳосили прокси "ҷодугарӣ" бидуни ҷудокунии нақш → RCA мураккаб ва радиуси таркиши баланд.
Бознигариҳо барои дархостҳои ғайримуқаррарӣ → амалиёти такрорӣ.
Бе сарлавҳа/URL нормализатсия → заҳролудшавӣ аз кэш ва калидҳои бад.
Ҷаласаҳои часпанда бидуни нақшаҳои ноком → часпидан ба мисоли таназзулёфта.
Набудани 'traceparent '/' x-request-id' → наметавонад мушкилотро ба ҳам орад.
Hard 301/302 дар сатҳи прокси → ҳалқаҳо ва аз даст додани назорати версияи API.
IGaming/fintech мушаххас
Пардохтҳо/PSP: дарвозаи махсусгардонидашуда бо m-TLS, танаффусҳои қатъӣ, калидҳои idempotent, whitelists IP/ASN.
Қуллаҳо (гугирдҳо/мусобиқаҳо): канарӣ/вазншуда, масирҳои хокистарӣ барои ботҳо, кэши хашмгин GET, муҳофизати пайдоиш аз "тӯфон".
Танзим/сабти ном: ислоҳи версияҳои сиёсат ва сабабҳои масир дар гузоришҳои аудит; PII-ро кам кунед.
Таъминкунандагони мундариҷа: пайваста-хэш аз ҷониби калиди провайдер барои ҷойгиршавии кэш ва ҳатто тақсимот.
Китобҳои бозикунии хурд
1) Нашри Canary API
1. 5% вазнро ба 'api-canary' дохил кунед; 2) p95/мониторинги хатогӣ; 3) зиёд кардани ҳисса; 4) худкор ҳангоми таназзул.
2) Бартараф кардани фаврии гиреҳи таназзулёфта
1. Баровардани дастӣ ё дастӣ 'холӣ кардан'; 2) санҷидани ҳавз ва зарбаи кэш; 3) пас аз ҳодиса RCA.
3) Оинаи функсия
1. Сояро бидуни таъсир ба посухҳо фаъол созед; 2) муқоиса кардани ченакҳо/посухҳо; 3) дар бораи гузариш қарор қабул кунед.
4) Тӯфони Retray
1. Кам кардани мӯҳлати такрорӣ-буҷа/вақт; 2) имкон додани шикастани дархост; 3) чӯбҳои маҳаллӣ/кэш; 4) ба эътидол овардани пайдоиш.
Натиҷа
Қабати боэътимоди тарроҳишуда ҷудокунии нақшҳо, масири детерминистӣ, сиёсатҳои боэътимод (вақт/бозсозӣ/CB), амният (MTLS/JWT/WAF) ва мушоҳида мебошад. Конфигуратсияҳои PIN ба IA, канарейкаҳо ва сояҳоро истифода баред, SLO-ро чен кунед - ва платформаи шумо ҳатто дар соатҳои гармтарини баландтарин миқёспазир, пешгӯишаванда ва бехатар хоҳад буд.