لایه های پروکسی و مسیریابی معکوس
خلاصه ای کوتاه
لایه پروکسی «اتوبوس جلو» پلت فرم است: TLS را کامل می کند، مشتریان را تایید می کند، ترافیک را توزیع می کند، قله ها را صاف می کند و باعث آزاد شدن امن (قناری ها، آبی سبز) می شود. حداقل بلوغ مجموعه: طبقه بندی روشن از نقش های پروکسی، قوانین مسیریابی قطعی، کنترل timeout/retray، کش + نرخ محدود، مشاهده به پایان و اتوماسیون.
طبقه بندی پروکسی
پروکسی رو به جلو - ترافیک خروجی مشتریان/خدمات خارج (خروج)، فیلتر/آینه، DLP.
معکوس پروکسی - درخواست های خارجی و مسیرهای به backends (تمرکز اصلی ما) را می پذیرد.
1. لبه/CDN/WAF (Anycast، فیلتر ربات، کش)
2. L7 ورود/API دروازه (مسیریابی، احراز هویت، سیاست)
3. لایه خدمات/مش (sidecar) برای شرق و غرب، mTLS و Retras
4. دروازه خروجی برای ادغام خروجی (PSP، شرکا)
مسیریابی (L4/L7) و الگوریتم ها
L4 (TCP/UDP، عبور از TLS): حداقل تاخیر، بدون درک HTTP.
L7 (HTTP/1) 1, HTTP/2, HTTP/3/gRPC): میزبان/مسیر/هدر/قوانین کوکی, تبدیل, WAF, کش.
- گرد رابین/حداقل اتصالات/EWMA - موارد رایج است.
- Consistent-hash (by cookie/identifier) - جلسات چسبنده و محل حافظه پنهان.
- Header-/Geo-/Latency-based - هدف قرار دادن منطقه/ارائه دهنده، PoPs سریع.
- قناری/وزن - مرحله نهایی (5 → 25 → 50 → 100٪).
- Shadow/Mirroring یک کپی از ترافیک یک سرویس جدید بدون تاثیر بر پاسخ است.
انتقال پرس و جو/پاسخ
URL rewrite/redirect: unify paths, versioning ('/v1/→/svc/v1/').
سرصفحه ها: عادی سازی «X-Forwarded-For/Proto/Host»، اضافه کردن «traceparent »/« x-request-id»، فیلتر غیر ضروری.
CORS/CSRF: در دروازه متمرکز شوید، تنظیمات را در هر سرویس ایجاد نکنید.
فشرده سازی/فشرده سازی: Brotli/gzip، کنترل بر اساس نوع.
محدودیت های بدن و حفاظت در برابر هدر های slowloris/بزرگ.
احراز هویت و امنیت
TLS 1. 3 + OCSP منگنه + HSTS در جبهه های خارجی.
mTLS: مدیران، API های عملیاتی، کانال های شریک.
OAuth2/OIDC: مجوز از طریق دروازه (خودآزمایی نشانه/JWT-verify) → حمل و نقل به ادعاهای در بالادست.
کلید های API/امضا (HMAC) برای خدمات متقابل و ادغام شریک.
فیلترهای WAF/bot: امضاها + قوانین رفتاری، greypass/captcha.
CSP/X-Frame-Options/Referrer-Policy - هدرهای امنیتی در لبه.
قابلیت اطمینان: Retras/Timeouts/TT
زمان بندی: اتصال/خواندن/نوشتن در L4/L7، سیاست واحد (به عنوان مثال، «اتصال 500ms»، «خواندن 3-5s» برای API).
Retrays: تنها idempotent ('GET/HEAD')، محدودیت زمان/مقدار، 'بودجه مجدد'.
Circuit-breaker: محدودیت در درخواست/خطاهای همزمان، شکست سریع و تخریب.
تشخیص دور - موارد بد را از استخر حذف می کند.
Backoff + jitter: به طوری که برای ایجاد یک «اثر گله».
کش و مدیریت ترافیک
کش L7: استاتیک/نیمه پویا (کاتالوگ، پیکربندی)، 's-maxage' + 'stale-while-revalidate'.
Rate-limit/Quota: توسط IP/ASN/دستگاه/کوکی، شمارنده توزیع شده (Redis/Rate-service).
جلسات چسبنده: کوکی/هش سازگار ؛ شکست و «دوباره چسباندن» را در نظر بگیرید.
درخواست فروپاشی (dedupe): حفاظت از منشاء از یک «طوفان» از GETs یکسان است.
پروتکل ها و ویژگی ها
HTTP/2: چندگانه، اولویت ها ؛ «ALPN: H2» را نگه دارید.
HTTP/3/QUIC: مقاومت از دست دادن/لرزش ؛ UDP/443 را باز کنید، MTU/PMTUD را نظارت کنید.
gRPC: چک های بهداشتی، جریان، مهلت ؛ پروکسی ها باید از «grpc-status» پشتیبانی کنند.
WebSocket/SSE: اتصالات طولانی مدت، زمان و محدودیت های بیکار صالح.
- L4/L7: 'p50/p95/p99'، ошибки ('4xx/5xx/Grpc-codes')، 'open _ conns'، 'CPS/RPS'، 'retry _ rate'.
- TLS: نسخه/رمزهای عبور، دست دادن p95، از سرگیری.
- مسیریابی: سهام توسط مسیر/خوشه، outlier-ejections.
- نرخ محدود/WAF: باعث/نرخ FP.
- سیاهههای مربوط: دسترسی (بدون PII)، دلایل مسیریابی، هدر ردیابی.
- ردیابی: 'traceparent '/B3، نمونه برداری.
- p95 TTFB API ≤ 250-300 میلی ثانیه ؛ خطای L7 ≤ 0 5%.
- موفقیت قناری ها (بدون تخریب معیارها) 99٪ پرتاب ها را ≥ می دهد.
- WAF نرخ FP ≤ 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-verify + 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"
عملکرد پروکسی
اتصال اتصال و keepalive به backends، محدودیت اتصال در هر نمونه.
استفاده مجدد، پین CPU/IRQ، بافر سوکت کافی.
TLS: زنجیره های کوتاه ECDSA +، از سرگیری ≥ 70٪، فعال HTTP/2/3.
کش در پروکسی برای «داغ» پاسخ (از جمله 304 اعتبار).
گرم کردن: گرم کردن DNS/TLS/اتصالات قبل از قله.
DR و تحمل خطا
حذف خودکار گرههای تخریب شده («outlier-ejection»).
L4/L7 بررسی سلامتی (HTTP body-version token)
Fail-open/Fail-closed - آگاهانه برای مسیرهای پرداخت/بحرانی انتخاب کنید.
حالت سایه قبل از تغییر ترافیک به یک سرویس جدید.
Runbooks: «فروپاشی خوشه»، «حلقه تغییر مسیر»، «نشت اتصال»، «طوفان retray».
چک لیست پیاده سازی
- طبقه بندی: لبه → ورود/API-GW → مش/خروج، نقش ها و مسئولیت ها.
- سیاست های مسیریابی: میزبان/مسیر/هدر/وزن، قناری/آبی سبز، سایه.
- امنیت: TLS 1. 3، mTLS برای مسیرهای حساس، JWT/OAuth2، WAF.
- زمان بندی/بازپرداخت/CB: ارزش یکنواخت، idempotency، بودجه مجدد.
- کش/نرخ محدود/درخواست فروپاشی که در آن مناسب است.
- قابلیت مشاهده: معیارها/سیاههها/مسیرها، شناسه های همبستگی.
- SLO: p95/خطاها/منابع ؛ هشدار به شکست محیط.
- IaC/GitOps: پیکربندی پروکسی مخزن، انتشار canary، بازگشت سریع.
- تست: مسیرهای E2E، اسکریپت هرج و مرج، بار قبل از حوادث.
خطاهای رایج
یک harvester پروکسی «سحر و جادو» بدون جدایی نقش → RCA پیچیده و شعاع انفجار بالا.
Retrays for non-idempotent queries → معاملات تکراری.
بدون نرمال سازی هدر/URL → مسمومیت کش و کلیدهای بد.
جلسات چسبنده بدون برنامه های شکست خورده → چسبیدن به یک نمونه تخریب شده.
گمشده «traceparent »/« x-request-id» → نمی تواند مشکلات را مرتبط کند.
301/302 سخت در سطح پروکسی → حلقه ها و از دست دادن کنترل نسخه API.
iGaming/fintech خاص
پرداخت/PSP: خروجی اختصاصی دروازه با mTLS، زمان بندی دقیق، کلید های idempotent، لیست های سفید IP/ASN.
قله (مسابقات/مسابقات): canary/وزن, مسیرهای خاکستری برای رباتها, تهاجمی کش GET, دفاع در برابر منشاء «طوفان».
مقررات/ورود به سیستم: رفع نسخه های سیاست و دلایل مسیر در سیاهههای مربوط به ممیزی ؛ PII را کاهش دهید
ارائه دهندگان محتوا: هش سازگار توسط کلید ارائه دهنده برای محل کش و حتی توزیع.
کتاب های مینی
1) انتشار 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) و مشاهده پذیری است. پیکربندی پین به IaC، استفاده از canaries و سایه، اندازه گیری SLO - و پلت فرم خود را مقیاس پذیر، قابل پیش بینی و امن حتی در طول داغترین ساعت اوج خواهد بود.