プロキシ

通信の中継と制御

プロキシとは

プロキシ(Proxy)は、クライアントとサーバーの間で通信を中継するサーバーです。 キャッシュ、フィルタリング、匿名化、負荷分散、セキュリティ強化など 様々な目的で使用されます。

フォワードプロキシ vs リバースプロキシ

フォワードプロキシ

クライアントプロキシインターネット
  • • クライアント側に配置
  • • 外部アクセスを代理
  • • アクセス制御、フィルタリング
  • • キャッシュによる高速化
  • • 匿名化(クライアントIPを隠す)

リバースプロキシ

インターネットプロキシサーバー群
  • • サーバー側に配置
  • • バックエンドを隠蔽
  • • SSL終端、負荷分散
  • • キャッシュ、圧縮
  • • WAF、DDoS対策

プロキシの主な用途

キャッシュ

頻繁にアクセスされるコンテンツをプロキシに保存。 バックエンドへの負荷軽減と応答時間短縮。CDNの基本原理。

SSL/TLS終端

プロキシでHTTPS接続を終端し、バックエンドとはHTTPで通信。 証明書管理の集約、バックエンドの負荷軽減。

負荷分散

リバースプロキシがロードバランサーとして機能。 複数のバックエンドサーバーにリクエストを分散。

セキュリティ

バックエンドのIPアドレスを隠蔽。WAFとしてL7攻撃を防御。 レートリミット、認証の集約。

主要なプロキシソフトウェア

Nginx

  • • 高性能Webサーバー/リバースプロキシ
  • • 設定が柔軟、ドキュメント豊富
  • • 静的ファイル配信も高速

HAProxy

  • • 高性能L4/L7ロードバランサー
  • • 詳細な統計ダッシュボード
  • • 大規模トラフィック向け

Envoy

  • • サービスメッシュ向けプロキシ
  • • 高い可観測性(メトリクス、トレース)
  • • Istioのデータプレーン

Squid

  • • フォワードプロキシとして実績
  • • キャッシュに強み
  • • 企業のアクセス制御に使用

Nginx リバースプロキシ設定

1# 基本的なリバースプロキシ
2server {
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
23server {
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# キャッシュ設定
36proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
37
38server {
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
↔ mTLS
ProxyApp B
Pod B

SRE/インフラ観点

監視項目

  • リクエスト数: プロキシ経由のトラフィック
  • レイテンシ: プロキシでの処理時間
  • キャッシュヒット率: キャッシュ効果
  • エラー率: 502/504等のプロキシエラー

ベストプラクティス

  • • X-Forwarded-Forで元クライアントIPを保持
  • • 適切なタイムアウト設定
  • • アクセスログの取得と分析
  • • 証明書の自動更新(Let's Encrypt)

よくある問題

  • 502 Bad Gateway: バックエンド到達不可
  • 504 Gateway Timeout: バックエンド応答遅延
  • バッファ不足: 大きなレスポンスでエラー