このページの目次
リバースプロキシとロードバランシング
リバースプロキシは単なる「リクエストの転送」ではありません——TLS 終端、キャッシュ、圧縮、レートリミット、ヘルスチェック、ブルーグリーンデプロイメントなど、現代アーキテクチャにおけるトラフィック管理はすべてこのレイヤーに集約されています。nginx/Caddy/HAProxy の設定哲学はそれぞれ異なります。
概要
リバースプロキシはサーバー側のフロントエンドです。すべての外部リクエストを受信し、TLS 終端、SNI ルーティング、レートリミット、ログ記録を行い、リクエストをバックエンドサービスに転送します。ロードバランサは、ポリシー(ラウンドロビン/最少接続/IP ハッシュなど)に基づいてリクエストを複数のバックエンドインスタンスに分散し、可用性とスループットを向上させます。Caddy は自動 TLS(ACME + Let's Encrypt のゼロコンフィグ)で知られ、nginx/HAProxy は高性能と豊富な L4/L7 機能でエンタープライズ環境を牽引しています。リバースプロキシを理解することは、インターネットサービスをデプロイする前提条件です。
リバースプロキシとフォワードプロキシ
Caddy 設定
grafana.liz6.com {
reverse_proxy 127.0.0.1:3000 {
header_up Host {upstream_hostport}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
}
chat.liz6.com {
reverse_proxy 127.0.0.1:3001
}
リバースプロキシの役割:
- TLS Termination: Caddy が TLS を処理 → バックエンドは HTTP → バックエンドは TLS を処理する必要がない
- SNI Routing: 同一ポート (443) で SNI に基づき異なるバックエンドへルーティング
- Request rewriting:
X-Forwarded-*ヘッダーの追加、パス/ヘッダーの変更 - Rate Limiting: クライアントごとまたはエンドポイントごとのレートリミット
- Access Log: ログの一元化 (Caddy JSON アクセスログ)
L4 と L7 ロードバランシング
ロードバランシングアルゴリズム
ラウンドロビン: バックエンドを順に巡回
最少接続: 接続数が最も少ないバックエンドを選択 (L7 のみ有効)
ランダム: ランダム
IP ハッシュ: 同一クライアント IP → 同一バックエンド → スティッキー
一貫性ハッシュ: ハッシュリング → バックエンドの増減時に 1/N だけが再ハッシュ
重み付け: バックエンドの重み → weight=3 なら 3 倍のトラフィック
ヘルスチェック:
パッシブ: 実際のリクエストの失敗から検出 (max_fails=N)
アクティブ: 定期的に GET /health → 200 を期待 → 失敗時に down とマーク
slow_start: バックエンド回復後、トラフィックを段階的に増加 (フラッディングを回避)
参考
- Caddy: caddyserver.com/docs/caddyfile/directives/reverse_proxy
- nginx: nginx.org/en/docs/http/ngx_http_upstream_module.html
- HAProxy: haproxy.org
Keywords: reverse proxy, SNI routing, L4/L7 LB, health check, sticky session, rate limiting, Caddy