プロキシレイヤーとリバースルーティング
概要
プロキシ層はプラットフォームの「フロントバス」です。TLSを完了し、クライアントを認証し、トラフィックを配布し、ピークを滑らかにし、リリースを安全にします(カナリア、ブルーグリーン)。最小成熟度セット:プロキシロールの明確な層別化、決定論的なルーティングルール、タイムアウト/リトレイ制御、キャッシュ+レート制限、エンドツーエンドのオブザビリティと自動化。
プロキシタクソノミ
フォワードプロキシ-外部のクライアント/サービスのアウトバウンドトラフィック(出力)、フィルタ/ミラーリング、DLP。
リバースプロキシ-バックエンドへの外部リクエストとルートを受け付けます(主な焦点)。
1.Edge/CDN/WAF (Anycast、ボットフィルタ、キャッシュ)
2.L7 入力/APIゲートウェイ(ルーティング、認証、ポリシー)
3.東西、mTLS、レトラのサービスレイヤー/メッシュ(サイドカー)
4.アウトバウンドインテグレーション用のエグレスゲートウェイ(PSP、パートナー)
ルーティング(L4/L7)とアルゴリズム
L4 (TCP/UDP、パススルーTLS): HTTPを理解せずに最小遅延。
L7 (HTTP/1。1、 HTTP/2、 HTTP/3/gRPC): host/path/header/cookieルール、変換、WAF、キャッシュ。
- ラウンドロビン/最小接続/EWMA-一般的なケース。
- Consistent-hash (cookie/identifierによる)-粘着性のあるセッションとキャッシュのローカル性。
- ヘッダー-/ジオベース/レイテンシーベース-地域/プロバイダによるターゲティング、高速PoP。
- カナリア/加重-段階的なロールアウト(5→25→50→100%)。
- シャドウ/ミラーリング-応答に影響を与えることなく、新しいサービスへのトラフィックのコピー。
クエリ/応答変換
URL rewrite/redirect: unify paths、 versioning ('/v1/→/svc/v1/')。
ヘッダー:normalize 'X-Forwarded-For/Proto/Host'、 add 'traceparent'/'x-request-id'、フィルタ不要。
CORS/CSRF:ゲートウェイで一元化し、すべてのサービスで設定を生成しません。
圧縮/減圧:Brotli/gzipのタイプによる制御。
ボディリミットとスロリス/特大ヘッダーに対する保護。
認証とセキュリティ
TLS 1。外部フロントで3+OCSPステープル+HSTS。
mTLS:管理者、運用API、パートナーチャネル。
OAuth2/OIDC:ゲートウェイ(token introspection/JWT-verify)による承認→上流のクレームへの転送。
クロスサービスおよびパートナー統合のためのAPIキー/署名(HMAC)。
WAF/botフィルタ:署名+行動規則、greypass/captcha。
CSP/X-Frame-Options/Referrer-Policy-エッジのセキュリティヘッダー。
信頼性: レトラ/タイムアウト/TT
タイムアウト:L4/L7の接続/読み取り/書き込み、単一のポリシー(例:'connect 500ms'、 'read 3-5s' for API)。
リトレイ:idempotent ('GET/HEAD')、 time/quantity limit、 'retry-budget'のみ。
回路遮断器:同時リクエスト/エラー、高速故障および劣化の制限。
アウトリエ検出-プールから悪いインスタンスを除外します。
Backoff+jitter:「群れ効果」を作成しないようにします。
キャッシュとトラフィック管理
キャッシュL7:静的/セミダイナミック(カタログ、コンフィギュレーション)、's-maxage'+'stale-while-revalidate'。
Rate-limit/Quota: IP/ASN/device/cookie、分散カウンタ(Redis/Rate-service)による。
スティッキーセッション:クッキー/consistent-hash;フェイルオーバーと「再貼り付け」を検討してください。
リクエスト折りたたみ(dedupe):同一のGETの「嵐」から原点を保護します。
プロトコルと機能
HTTP/2:多重化、優先順位;'ALPN: h2'を押します。
HTTP/3/QUIC:損失/ジッタ抵抗;UDP/443を開き、MTU/PMTUDを監視します。
gRPC:健康チェック、ストリーミング、期限;proxiesは'grpc-status'をサポートしている必要があります。
WebSocket/SSE:長時間の接続、有能なアイドル状態のタイムアウトと制限。
観測可能性とSLO
メトリクス:- L4/L7: 'p50/p95/p99'、 '4xx/5xx/Grpc-codes'、 'open_conns'、' CPS/RPS'、'retry_rate'。
- TLS:バージョン/暗号、p95ハンドシェイク、再開。
- ルーティング:route/cluster、 outlier-ejectionsによる共有。
- Rate-limit/WAF: トリガー/FPレート。
- ログ:アクセス(PIIなし)、ルーティングの理由、トレースヘッダー。
- トレース:'traceparent '/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;
}
}
HAProxy (JWT-verify+mTLS to 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"
プロキシパフォーマンス
バックエンドへの接続プールとキープアライブ、インスタンスあたりの接続制限。
再使用ポート、ピンCPU/IRQ、十分なソケットバッファ。
TLS: ECDSA+ショートチェーン、再開≥ 70%、有効HTTP/2/3。
「hot」レスポンスのプロキシ内のキャッシュ(304-validationを含む)。
ウォームアップ:ピーク前にDNS/TLS/接続をウォームアップします。
DRとフォールトトレランス
劣化したノードの自動除去('outlier-ejection')。
健康チェックL4/L7 (HTTPボディバージョントークン)。
Fail-open/Fail-closed-支払い/クリティカルパスを意識的に選択します。
トラフィックを新しいサービスに切り替える前のシャドウモード。
Runbooks: 「cluster collapse」、 「redirect loop」、 「connection leaks'、」 retray storm'。
実装チェックリスト
- 層別化:Edge→Ingress/API-GW→Mesh/Egress、役割と責任。
- ルーティングポリシー:host/path/header/weight、 canary/blue-green、 shadow。
- セキュリティ:TLS 1。3の敏感な道、JWT/OAuth2、 WAFのためのmTLS。
- タイムアウト/リトレイ/CB:均一な値、idempotency、再試行予算。
- キャッシュ/レート制限/リクエスト折りたたみ。
- オブザビリティ:メトリック/ログ/トレイル、相関識別子。
- SLO: p95/errors/resources;周辺障害へのアラート。
- IaC/GitOps:リポジトリプロキシの構成、カナリアリリース、高速ロールバック。
- テスト:e2eルート、カオススクリプト、イベント前のロード。
よくあるエラー
ロール分離→複雑なRCAとハイブラスト半径のない「魔法の」プロキシハーベスター。
非idempotentクエリのリトレイ→重複トランザクション。
ヘッダー/URLの正規化→キャッシュポイズニングと不正なキーがありません。
フェイルオーバー計画のないスティッキーセッション→劣化したインスタンスに固執。
'traceparent'/'x-request-id'が見つかりません→問題を相関させることはできません。
プロキシレベルでのハード301/302→APIバージョン制御のループと損失。
iGaming/fintech固有の
支払い/PSP: mTLS、厳格なタイムアウト、idempotentキー、IP/ASNホワイトリストを備えた専用のegress-gateway。
ピーク(マッチ/トーナメント):カナリア/重み付け、ボットのグレーのルート、攻撃的なGETキャッシュ、「嵐」に対する起源防御。
規制/ログ:監査ログのポリシーのバージョンとルートの理由を修正します。PIIを最小化します。
コンテンツプロバイダ:キャッシュローカリティとディストリビューションのためのプロバイダキーによるconsistent-hash。
ミニプレイブック
1) Canary APIリリース
1.'api-canary'の5%の重量を含んで下さい;2) p95/errorの監視;3)シェアを拡大します。4)分解の間に自動ロールバック。
2)劣化したノードの緊急除去
1.Outlier-ejectionまたはmanual 'drain';2)プールをチェックし、キャッシュのヒット。3)事件後のRCA。
3)機能ミラーリング
1.応答に影響を与えることなく影を有効にします。2)メトリクス/レスポンス差分を比較する。3)スイッチングを決定します。
4)リトレイストーム
1.再試行予算/時間制限を削減する。2)リクエストの折りたたみを有効にします。3)ローカルスタブ/キャッシュ。4)起源を安定させて下さい。
[結果]
適切に設計されたプロキシ層は、役割分離、決定論的なルーティング、信頼できるポリシー(タイムアウト/リトレイ/CB)、セキュリティ(mTLS/JWT/WAF)、およびオブザビリティです。IaCへのピン構成、カナリアとシャドウを使用し、SLOを測定します。最も暑いピーク時でも、プラットフォームはスケーラブルで予測可能で安全です。