שכבות פרוקסי וניתוב הפוך
תקציר
שכבת הפרוקסי היא ”האוטובוס הקדמי” של הפלטפורמה: היא משלימה את TLS, מאשרת לקוחות, מפיצה תנועה, מייבשת פסגות והופכת את השחרור לבטוח (קנריות, כחול-ירוק). הגדרת בגרות מינימלית: סטרטיפיקציה ברורה של תפקידי פרוקסי, כללי ניתוב דטרמיניסטיים, בקרת זמן/מגש מחדש, מגבלת קצב מטמון +, תצפית מקצה לקצה ואוטומציה.
טקסונומיה פרוקסי
פרוקסי קדמי - תנועה חיצונית של לקוחות/שירותים מחוץ (egress), מסננים/שיקופים, DLP.
פרוקסי הפוך - מקבל בקשות חיצוניות ומסלולים לגבות (המוקד העיקרי שלנו).
1. קצה/CDN/WAF (בכל מקום, מסנני בוט, מטמון)
2. L7 Ingress/API-Gateway (ניתוב, אימות, מדיניות)
3. שכבת שירות (Service Layer/Mesh) עבור מזרח-מערב, MTLS ו ־ Retras
4. שער יציאה לאינטגרציות חיצוניות (PSP, שותפים)
ניתוב (L4/L7) ואלגוריתמים
L4 (TCP/UDP, passetrough TLS): עיכוב מינימלי, ללא הבנה של HTTP.
L7 (HTTP/1. 1, HTTP/2, HTTP/3/gRPC): מארח/שביל/כותרת/חוקי עוגיות, טרנספורמציה, WAF, מטמון.
- עגולים-רובין/הכי פחות-קשרים/EWMA - מקרים נפוצים.
- חשיש עקבי (על ידי עוגייה/זיהוי) - הפעלות דביקות ומקומות מטמון.
- ראש -/Geo-/Latency מבוסס מיקוד על ידי אזור/ספק, POPs מהיר.
- Canary/Weavited - rollout passed (5 = 25 = 50 = 100%).
- Shadow/Mirroring - עותק של תנועה לשירות חדש מבלי להשפיע על תגובות.
שאילתה/טרנספורמציה
URL לשכתב/להפנות: לאחד מסלולים, versioning ('/v1/#/svc/v1/').
כותרות: נרמול 'X-Forwared-For/Proto/Host', הוסף 'tracepart'/' X-Request-id', מסנן לא נחוץ.
COURS/CSRF: התרכז בשער, אל תייצר הגדרות בכל שירות.
דחיסה/הפחתת לחץ: ברוטלי/gzip, בקרה אחר סוג.
גבולות גוף והגנה מפני כותרות איטיות/גדולות מדי.
אימות וביטחון
TLS 1. 3 + הידוק OCSP + HSTS בחזיתות חיצוניות.
MTLS: מנהל, API תפעולי, ערוצים שותפים.
OAuth2/OIDC: אישור באמצעות שער (token introspection/JWT-vrice).
API Keys/Signatures (בראשי תיבות: HMAC) עבור שילוב צולב ושיתוף פעולה.
מסנני WAF/bot: חתימות + כללי התנהגות, greypass/captcha.
CSP/X-Frame-Options/Referror-Policy - ראשי אבטחה בקצה.
אמינות: Retras/Timeout/TT
פסקי זמן: חיבור/קריאה/כתיבה על L4/L7, מדיניות יחידה (לדוגמה, "לחבר 500 מ" מ "," לקרוא 3-5 "עבור API).
מגשים מחדש: רק אידמפוטנטים (”GET/HEAD”), מגבלת זמן/כמות, ”retry-butter”.
מפסק מעגל: הגבלות על בקשות/שגיאות בו זמנית, כשל מהיר והשפלה.
גילוי חריג יותר - לא כולל מקרים רעים מהבריכה.
Backoff + jiter: כדי לא ליצור ”אפקט עדר”.
מטמון וניהול תנועה
מטמון L7: סטטי/חצי דינמי (קטלוגים, תצורות), 's-maxage' + 'stale-when-aven-revalidate'.
מגבלת קצב/מכסה: על ידי IP/ASN/התקן/עוגייה, דלפק מבוזר (Redis/Rate-service).
פגישות דביקות: עוגייה/עקבית-חשיש; שקול כשל ו ”הדבקה מחדש”.
בקשה לקריסה (dedupe): הגנה על מקור מ ”סערה” של גטים זהים.
פרוטוקולים ותכונות
HTTP/2: ריבוי, סדר עדיפויות; להחזיק 'ALPN: H2'.
HTTP/3/QUIC: התנגדות אובדן/עצבנות; לפתוח את UDP/443, לפקח על MTU/PMTUD.
GRPC: בדיקות בריאות, הזרמה, מועדים; פרוקסי חייב לתמוך 'grpc-status'.
שקע רשת/SSE: קשרים ארוכי ימים, זמני סרק כשירים ומגבלות.
תצפית ו SLO
מדדים:- L4/L7: 'p50/p95/p99', '4xx/5xx/Grpc-codes'), 'open _ cons',' CPS/RPS ',' retry _ rate '.
- TLS: גרסה/צפנים, לחיצת יד p95, חידוש.
- ניתוב: מניות לפי מסלול/אשכול, פליטות חוץ.
- מגבלת קצב/WAF: מפעיל/FP-rate.
- יומנים: גישה (ללא PII), ניתוב סיבות, עקבות כותרות.
- עקבות: ”עקבות ”/B3, דגימה.
- P95 TFB API 250-300 ms; שגיאה 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;
}
}
HAPROXY (JWT-vrice + mTLS כדי 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
שליח (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"
ביצועי פרוקסי
איגום חיבור ושמירה על גיבוי, הגבלת חיבור לכל מקרה.
שימוש חוזר, סיכה מעבד/IRQ, מספיק מזגנים שקעים.
שרשראות קצרות ECDSA +, חידוש של 70%, HTTP/2/3 הופעלו.
מטמון בפרוקסי לתגובות ”חמות” (כולל 304-אימות).
חימום: חימום DNS/TLS/חיבורים לפני פסגות.
DR וסובלנות אשמה
הסרה אוטומטית של צמתים מושפלים (”outlier-ejection”).
בדיקות בריאות L4/L7 (HTTP גוף-גרסה אסימון).
כשל פתוח/כשל סגור - לבחור במודע לתשלום/שבילים קריטיים.
מצב צל לפני מעבר תנועה לשירות חדש.
ספרי ריצה: ”התמוטטות אשכול”, ”לולאת כיוון”, ”דליפות חיבור”, ”סופת מגש מחדש”.
רשימת יישומים
Stratification: Edge # Ingress/API-GW # Mesh/Egress, תפקידים ואחריות.
[ מדיניות ניתוב ]: מארח/שביל/כותרת/משקל, קנרית/כחול-ירוק, צל.
[ ] אבטחה: TLS 1. 3, MTLS למסלולים רגישים, JWT/OAuth2, WAF.
[ ] Timeouts/Reprays/CB: ערכים אחידים, אידמפוטנטיות, מחדש-תקציב.
[ ] מטמון/מגבלת קצב/קריסת בקשה במקום המתאים.
[ ] תצפית: מדדים/רישומים/שבילים, זיהוי מתאם.
[ ] SLO: p95/שגיאות/משאבים; התראות לכשלונות היקפיים.
[ ] IAC/GitOps: תצורות פרוקסי מאגר, משחררים כנרית, rollback מהיר.
[ ] בדיקות: מסלולים e2e, תסריטי כאוס, עומס לפני אירועים.
שגיאות נפוצות
קוצר פרוקסי ”קסם” ללא הפרדת תפקידים * RCA מורכב ורדיוס פיצוץ גבוה.
מגשים מחדש לשאילתות לא אידמפוטנטיות * שכפול עסקאות.
אין הרעלת ראש/כתובת נורמליזציה = הרעלת מטמון ומפתחות גרועים.
מפגשים דביקים ללא תוכניות כשל פי דבק על מקרה משפיל.
חסר 'tracepart'/' x-בקשה-id' = = לא יכול להתאים בעיות.
קשה 301/302 ברמת פרוקסי = לולאות ואובדן בקרת גרסת API.
iGaming/fintech ספציפי
תשלומים/PSP: יציאה ייעודית עם mTLS, פסקי זמן מחמירים, מפתחות אידמפוטנטים, IP/ASN לבנים.
פסגות (גפרורים/טורנירים): כנרית/משוקללת, מסלולים אפורים לבוטים, מטמון GET אגרסיבי, הגנה על המקור מפני ”הסערה”.
רגולציה/רישום: תיקון גרסאות מדיניות וסיבות מסלול ביומני ביקורת; למזער מח "ש.
ספקי תוכן: עקבי-חשיש על ידי מפתח ספק למקומות מטמון ואפילו הפצה.
ספרי משחקים מיני
1) שחרור API קנרי
1. כולל 5% משקל על ”אפי-קנרית”; 2) ניטור p95/שגיאות; 3) להרחיב את החלק; 4) גלגול אוטומטי בזמן ההשפלה.
2) הסרת חירום של הצומת המושפל
1. חריץ-פליטה או ידני ”ניקוז”; 2) בדיקת הבריכה ופגיעת המטמון; 3) לאחר תקרית RCA.
3) שיקוף פונקציות
1. אפשר צל ללא השפעה על תגובות; 2) השווה בין מדדים/תגובת diff; 3) להחליט על החלפה.
4) סופת מגש
1. הפחת את מגבלות התקציב/זמן; 2) לאפשר קריסת בקשה; 3) גורים מקומיים/מטמון; 4) לייצב את המוצא.
תוצאות
שכבת פרוקסי מעוצבת היטב היא הפרדת תפקידים, ניתוב דטרמיניסטי, מדיניות אמינה (פסקי זמן/מגשים/CB), אבטחה (mTLS/JWT/WAF) ויכולת תצפית. תצורות סיכה ל-IC, השתמש בקנריות וצל, מדד SLO - והפלטפורמה שלך תהיה ניתנת לאיזון, צפויה ומאובטחת אפילו בשעות השיא החמות ביותר.