プロキシ
通信の中継と制御
プロキシとは
プロキシ(Proxy)は、クライアントとサーバーの間で通信を中継するサーバーです。 キャッシュ、フィルタリング、匿名化、負荷分散、セキュリティ強化など 様々な目的で使用されます。
フォワードプロキシ vs リバースプロキシ
フォワードプロキシ
クライアント→プロキシ→インターネット
- • クライアント側に配置
- • 外部アクセスを代理
- • アクセス制御、フィルタリング
- • キャッシュによる高速化
- • 匿名化(クライアントIPを隠す)
リバースプロキシ
インターネット→プロキシ→サーバー群
- • サーバー側に配置
- • バックエンドを隠蔽
- • SSL終端、負荷分散
- • キャッシュ、圧縮
- • WAF、DDoS対策
プロキシの主な用途
キャッシュ
頻繁にアクセスされるコンテンツをプロキシに保存。 バックエンドへの負荷軽減と応答時間短縮。CDNの基本原理。
SSL/TLS終端
プロキシでHTTPS接続を終端し、バックエンドとはHTTPで通信。 証明書管理の集約、バックエンドの負荷軽減。
負荷分散
リバースプロキシがロードバランサーとして機能。 複数のバックエンドサーバーにリクエストを分散。
セキュリティ
バックエンドのIPアドレスを隠蔽。WAFとしてL7攻撃を防御。 レートリミット、認証の集約。
主要なプロキシソフトウェア
Nginx
- • 高性能Webサーバー/リバースプロキシ
- • 設定が柔軟、ドキュメント豊富
- • 静的ファイル配信も高速
HAProxy
- • 高性能L4/L7ロードバランサー
- • 詳細な統計ダッシュボード
- • 大規模トラフィック向け
Envoy
- • サービスメッシュ向けプロキシ
- • 高い可観測性(メトリクス、トレース)
- • Istioのデータプレーン
Squid
- • フォワードプロキシとして実績
- • キャッシュに強み
- • 企業のアクセス制御に使用
Nginx リバースプロキシ設定
1 # 基本的なリバースプロキシ 2 server { 3 listen 80; 4 server_name example.com; 5 6 location / { 7 proxy_pass http://localhost:8080; 8 9 # ヘッダー設定 10 proxy_set_header Host $host; 11 proxy_set_header X-Real-IP $remote_addr; 12 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 13 proxy_set_header X-Forwarded-Proto $scheme; 14 15 # バッファ設定 16 proxy_buffering on; 17 proxy_buffer_size 16k; 18 proxy_buffers 4 32k; 19 } 20 } 21 22 # SSL終端 + バックエンドはHTTP 23 server { 24 listen 443 ssl http2; 25 server_name example.com; 26 27 ssl_certificate /etc/ssl/certs/example.com.crt; 28 ssl_certificate_key /etc/ssl/private/example.com.key; 29 30 location / { 31 proxy_pass http://backend; # HTTPでバックエンドへ 32 } 33 } 34 35 # キャッシュ設定 36 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m; 37 38 server { 39 location / { 40 proxy_cache my_cache; 41 proxy_cache_valid 200 1h; 42 proxy_cache_valid 404 1m; 43 add_header X-Cache-Status $upstream_cache_status; 44 } 45 }
サービスメッシュとサイドカープロキシ
サービスメッシュでは、各サービスのサイドカーとしてプロキシ(Envoy等)をデプロイ。 サービス間通信の暗号化、認証、可観測性、トラフィック制御を統一的に管理。
App AProxy
Pod A
ProxyApp B
Pod B
SRE/インフラ観点
監視項目
- • リクエスト数: プロキシ経由のトラフィック
- • レイテンシ: プロキシでの処理時間
- • キャッシュヒット率: キャッシュ効果
- • エラー率: 502/504等のプロキシエラー
ベストプラクティス
- • X-Forwarded-Forで元クライアントIPを保持
- • 適切なタイムアウト設定
- • アクセスログの取得と分析
- • 証明書の自動更新(Let's Encrypt)
よくある問題
- • 502 Bad Gateway: バックエンド到達不可
- • 504 Gateway Timeout: バックエンド応答遅延
- • バッファ不足: 大きなレスポンスでエラー