प्रॉक्सी परतें और रिवर्स रूटिंग
संक्षिप्त सारांश
प्रॉक्सी परत प्लेटफ़ॉर्म की "फ्रंट बस" है: यह टीएलएस को पूरा करती है, ग्राहकों को प्रमाणित करती है, ट्रैफ़िक वितरित करती है, चोटियों को चिकना करती है और रिलीज़ को सुरक्षित बनाती है (कैनरी, नीला-हरा)। न्यूनतम परिपक्वता सेट: प्रॉक्सी भूमिकाओं का स्पष्ट स्तरीकरण, नियतात्मक मार्ग नियम, टाइमआउट/रिट्रे नियंत्रण, कैश + दर-सीमा, एंड-टू-एंड अवलोकन और स्वचालन।
प्रॉक्सी टैक्सोनॉमी
अग्रेषित प्रॉक्सी - बाहर क्लाइंट/सेवाओं का आउटबाउंड ट्रैफिक (एग्रेस), फिल्टर/मिररिंग, डीएलपी।
रिवर्स प्रॉक्सी - बैकेंड (हमारा मुख्य फोकस) के लिए बाहरी अनुरोधों और मार्गों को स्वीकार करता है।
उत्पादन पथ में परतें:1. एज/सीडीएन/डब्ल्यूएएफ (एनीकास्ट, बॉट फिल्टर, कैश)
2. L7 इंग्रेस/एपीआई-गेटवे (रूटिंग, प्रमाणीकरण, नीतियां)
3. पूर्व-पश्चिम, एमटीएलएस और रेट्रास के लिए सेवा परत/मेश (साइडकार)
4. आउटबाउंड एकीकरण के लिए एग्रेस-गेटवे (पीएसपी, भागीदार)
रूटिंग (L4/L7) और एल्गोरिदम
L4 (TCP/UDP, पासथ्रू TLS): HTTP को समझे बिना न्यूनतम देरी।
L7 (HTTP/1। 1, HTTP/2, HTTP/3/gRPC): होस्ट/पाथ/हेडर/कुकी नियम, परिवर्तन, WAF, कैश।
एल्गोरिदम:- राउंड-रॉबिन/लिस्ट-कनेक्शन/EWMA - सामान्य मामले।
- सुसंगत-हैश (कुकी/पहचानकर्ता द्वारा) - चिपचिपा सत्र और कैश इलाके।
- Header-/Geo-/Latency-आधारित - क्षेत्र/प्रदाता द्वारा लक्षित, तेज PoP।
- कैनरी/भारित - चरणबद्ध रोलआउट (5→25→50→100%)।
- छाया/मिररिंग - प्रतिक्रियाओं को प्रभावित किए बिना एक नई सेवा के लिए यातायात की एक प्रति।
क्वेरी/प्रतिक्रिया परिवर्तन
URL पुनर्लेखन/पुनर्निर्देशन: पथ एकीकृत करें, वर्शनिंग ('/v1/ →/svc/v1/')।
हेडर: 'X-Forwarded-For/Proto/Host' को सामान्य करें, 'traceparent '/' x-request-id' जोड़ें, अनावश्यक फ़िल्टर करें।
CORS/CSRF: प्रवेश द्वार में केंद्रीकृत करें, हर सेवा में सेटिंग का उत्पादन न करें।
संपीड़न/अपघटन: Brotli/gzip, प्रकार से नियंत्रण।
शरीर की सीमा और सुरक्षा धीमी गति से/ओवरसाइज़हेडर के खिलाफ।
सत्यापन और सुरक्षा
टीएलएस 1। 3 + OCSP स्टेपलिंग + बाहरी मोर्चों पर HSTS।
mTLS: प्रशासन, परिचालन API, साझेदार चैनल।
OAuth2/OIDC: गेटवे (टोकन आत्मनिरीक्षण/JWT-सत्यापित) के माध्यम से प्राधिकरण → अपस्ट्रीम में दावों के लिए अग्रेषित।
क्रॉस-सर्विस और पार्टनर एकीकरण के लिए एपीआई कुंजी/हस्ताक्षर (एचएमएसी)।
WAF/बॉट फिल्टर: हस्ताक्षर + व्यवहार नियम, ग्रीपास/कैप्चा।
सीएसपी/एक्स-फ्रेम-विकल्प/रेफरर-नीति - किनारे पर सुरक्षा शीर्षक।
विश्वसनीयता: रेट्रास/टाइमआउट/टीटी
टाइमआउट: L4/L7, सिंगल पॉलिसी पर कनेक्ट/रीड/राइट (उदाहरण के लिए, 'कनेक्ट 500ms', 'एपीआई के लिए 3-5s' पढ़ें)।
रिट्रेज़: केवल पहचान ('GET/HEAD'), समय/मात्रा सीमा, 'पुनरावृत्ति-बजट'।
सर्किट-ब्रेकर: एक साथ अनुरोधों/त्रुटियों, तेजी से विफलता और गिरावट पर प्रतिबंध।
बाहरी पता लगाना - पूल से बुरे उदाहरणों को बाहर करता है।
बैकऑफ + जिटर: ताकि "झुंड प्रभाव" न बनाया जा सके।
कैश और ट्रैफिक प्रबंधन
कैश L7: स्थिर/अर्ध-गतिशील (कैटलॉग, कॉन्फ़िग्स), 'एस-मैक्सेज' + 'बासी-जबकि-पुनर्नवीनीकरण'।
दर-सीमा/कोटा: आईपी/एएसएन/डिवाइस/कुकी द्वारा, वितरित काउंटर (रेडिस/रेट-सेवा)।
स्टिकी सत्र: कुकी/सुसंगत-हैश; विफल और "फिर से चिपकाने" पर विचार करें।
अनुरोध ढहने (dedupe): समान GETs के "तूफान" से मूल की रक्षा करना।
प्रोटोकॉल और सुविधाएँ
HTTP/2: मल्टीप्लेक्सिंग, प्राथमिकताएं; 'ALPN: h2' पकड़ो।
HTTP/3/QUIC: नुकसान/जीटर प्रतिरोध; UDP/443 खोलें, MTU/PMTUD की निगरानी करें।
gRPC: स्वास्थ्य-जांच, स्ट्रीमिंग, समय सीमा; प्रॉक्सी को 'grpc-station' का समर्थन करना चाहिए।
WebSocket/SSE: लंबे समय तक रहने वाले कनेक्शन, सक्षम निष्क्रिय समय और सीमा।
अवलोकन और एसएलओ
मेट्रिक्स:- L4/L7: 'p50/p95/p99', ошибки ('4xx/5xx/Grpc-codes'), 'open _ conns', 'CPS/RPS', 'retry _ rate'।
- TLS: संस्करण/सिफर्स, p95 हैंडशेक, फिर से शुरू।
- रूटिंग: रूट/क्लस्टर, आउटलेयर-इजेक्शन द्वारा शेयर।
- दर-सीमा/WAF: ट्रिगर/FP-दर।
- लॉग: एक्सेस (पीआईआई के बिना), रूटिंग कारण, ट्रेस हेडर।
- निशान: 'traceparent '/B3, नमूना।
- p95 TTFB API ≤ 250-300 ms; त्रुटि L7 ≤ 0। 5%.
- कैनरी की सफलता (मेट्रिक्स के क्षरण के बिना) ≥ 99% लॉन्च।
- एफपी-दर 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-सत्यापित + 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, पिन CPU/IRQ, पर्याप्त सॉकेट बफ़र्स।
TLS: ECDSA + शॉर्ट चेन, फिर से शुरू ≥ 70%, HTTP/2/3 सक्षम।
"हॉट" प्रतिक्रियाओं (304-सत्यापन सहित) के लिए प्रॉक्सी में कैश।
वार्म-अप: चोटियों से पहले DNS/TLS/कनेक्शन को गर्म करना।
डीआर और दोष सहिष्णुता
अपमानित नोड्स ('बाहरी-इजेक्शन') का ऑटो-हटाना।
स्वास्थ्य-जांच L4/L7 (HTTP बॉडी-वर्जन टोकन)।
फेल-ओपन/फेल-बंद - भुगतान/महत्वपूर्ण रास्तों के लिए सचेत रूप से चुनें।
ट्रैफिक को नई सेवा में बदलने से पहले छाया मोड।
रनबुक: "क्लस्टर पतन", "रीडायरेक्ट लूप", "कनेक्शन लीक", "रिट्रे स्टॉर्म"।
कार्यान्वयन जाँच सूची
- स्तरीकरण: एज → इंग्रेस/एपीआई-जीडब्ल्यू → मेश/एग्रेस, भूमिकाएं और जिम्मेदारियां।
- रूटिंग नीतियां: मेजबान/पथ/हेडर/वजन, कैनरी/नीला-हरा, छाया।
- सुरक्षा: टीएलएस 1। 3, संवेदनशील रास्तों के लिए mTLS, JWT/OAuth2, WAF।
- टाइमआउट/रिट्रेज ़/सीबी: समान मान, पहचान, पुन: बजट।
- कैश/दर-सीमा/अनुरोध-पतन जहां उपयुक्त हो।
- अवलोकन: मेट्रिक्स/लॉग/ट्रेल्स, सहसंबंध पहचानकर्ता।
- एसएलओ: p95/त्रुटियां/संसाधन; परिधि विफलताओं के लिए अलर्ट।
- IaC/GitOps: रिपॉजिटरी प्रॉक्सी कॉन्फ़िग, कैनरी रिलीज़, फास्ट रोलबैक।
- परीक्षण: e2e मार्ग, अराजकता स्क्रिप्ट, घटनाओं से पहले लोड।
सामान्य त्रुटियाँ
भूमिका पृथक्करण के बिना एक "जादू" प्रॉक्सी हार्वेस्टर - जटिल आरसीए और उच्च विस्फोट त्रिज्या।
गैर-आइडेम्पोटेंट प्रश्नों के लिए रिट्रेज़ - डुप्लिकेट लेनदेन।
कोई हेडर/यूआरएल सामान्यीकरण → कैश-विषाक्तता और खराब कुंजी नहीं।
विफल योजनाओं के बिना चिपचिपा सत्र - एक अपमानित उदाहरण पर चिपके हुए।
गुम 'traceparent '/' x-request- id' समस्याओं को सहसंबंधित नहीं कर सकता.
प्रॉक्सी स्तर पर हार्ड 301/302 - लूप और एपीआई संस्करण नियंत्रण का नुकसान।
iGaming/fintech विशिष्ट
भुगतान/PSP: एमटीएलएस के साथ समर्पित एग्रेस-गेटवे, सख्त टाइमआउट, आइडेम्पोटेंट कुंजी, आईपी/एएसएन व्हाइटलिस्ट।
चोटियों (मैच/टूर्नामेंट): कैनरी/भारित, बॉट्स के लिए ग्रे मार्ग, आक्रामक GET कैश, "तूफान" के खिलाफ मूल रक्षा।
विनियमन/लॉगिंग: ऑडिट लॉग में नीति संस्करण और मार्ग कारण तय करना; PII को कम करें।
सामग्री प्रदाता: कैश इलाके और यहां तक कि वितरण के लिए प्रदाता कुंजी द्वारा सुसंगत-हैश।
मिनी प्लेबुक
1) कैनरी एपीआई रिलीज़
1. 'एपी-कैनरी' पर 5% वजन शामिल करें; 2) p95/त्रुटि निगरानी; 3) शेयर का विस्तार करें; 4) गिरावट के दौरान ऑटो-रोलबैक।
2) अपमानित नोड का आपातकालीन हटाना
1. बाहरी-अस्वीकृति या मैनुअल 'नाली'; 2) पूल की जाँच और कैश की हिट; 3) घटना के बाद आरसीए।
3) फंक्शन मिररिंग
1. प्रतिक्रियाओं को प्रभावित किए बिना छाया सक्षम करें; 2) मेट्रिक्स/रिस्पांस डिफ की तुलना करें; 3) स्विच करने का फैसला।
4) रिट्रे तूफान
1. रीट्री-बजट/समय सीमा कम करें; 2) अनुरोध-पतन सक्षम करना; 3) स्थानीय स्टब्स/कैश; 4) मूल को स्थिर करें।
परिणाम
एक अच्छी तरह से डिज़ाइन की गई प्रॉक्सी परत भूमिका पृथक्करण, नियतात्मक मार्ग, विश्वसनीय नीतियां (टाइमआउट/रिट्रे/सीबी), सुरक्षा (एमटीएलएस/जेडब्ल्यूटी/डब्ल्यूएएफ) और अवलोकन है। IaC के लिए पिन कॉन्फ़िगरेशन, कैनरी और छाया का उपयोग करें, SLO को मापते हैं - और आपका प्लेटफ़ॉर्म सबसे गर्म शिखर घंटों के दौरान भी स्केलेबल, अनुमानित और सुरक्षित होगा।