株式会社エスロジカル
株式会社エスロジカル
SSL証明書(DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

HOME > 技術ドキュメント > Nginxリバースプロキシ構成の実践設計

Nginxリバースプロキシ構成の実践設計

執筆:株式会社エスロジカル(Webシステム受託開発・インフラ構築・運用改善)


Nginx をリバースプロキシとして使う構成は、現代の Web インフラではほぼ標準です。 しかし「とりあえず proxy_pass を書いた」だけでは、タイムアウト・ヘッダー漏れ・キャッシュの誤動作など 本番特有の問題が起きやすくなります。
本記事では、リバースプロキシ設計で押さえるべき実務上の判断基準をまとめます。

Nginx をリバースプロキシとして前段に置く主な目的は次の通りです。

パターン 構成 向いているケース
シンプル1段 インターネット → Nginx(SSL終端)→ アプリ(HTTP) 単一サーバー・小規模
マルチバックエンド Nginx → 複数バックエンド(パスベースのルーティング) マイクロサービス・API ゲートウェイ的な用途
ロードバランシング Nginx(upstream)→ 複数の同一アプリサーバー 水平スケールアウト・高可用性
2段プロキシ CDN / ALB → Nginx → アプリ クラウド構成・DDoS 対策

リバースプロキシが SSL を終端し、バックエンドとの通信は HTTP にする設計が一般的です。 バックエンドが同じサーバー内にある場合は特に問題ありませんが、 異なるサーバー間の通信(例:マネージド DB)は別途暗号化を検討します。

証明書は Let's Encrypt でも有料証明書でも Nginx に設定できます。 企業サイト・EC サイトでは OV 以上の有料証明書を推奨します。
SSL証明書の一覧・購入はこちら /  CSR 作成・Apache/Nginx へのインストール手順 /  SSL証明書 FAQ

リバースプロキシを経由すると、バックエンドから見たクライアント IP が Nginx のアドレスになってしまいます。 アクセスログ・不正アクセス検知・地域制限などを正しく動作させるために以下のヘッダーを設定します。

設定 目的
proxy_set_header X-Real-IP $remote_addr; 実際のクライアント IP をバックエンドに転送
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; プロキシチェーンを含む IP 一覧を転送
proxy_set_header X-Forwarded-Proto $scheme; クライアントが HTTPS で接続したことをバックエンドに通知(リダイレクトループ防止)
proxy_set_header Host $host; バーチャルホスト判定のためにオリジナルの Host ヘッダーを転送

注意:X-Forwarded-For はクライアント側から偽装できます。 信頼できるプロキシからのみこのヘッダーを受け付けるよう、バックエンドアプリ側でも適切に処理してください。

デフォルト値のままでは、ファイルアップロードや時間のかかる API 処理で問題が起きやすくなります。


Nginx 設計・インフラ構築のご相談はエスロジカルへ
リバースプロキシ構成・ロードバランシング・SSL 証明書設定まで、インフラ構築を一貫してサポートします。
お問い合わせはこちら
関連:SSL証明書 / SSL証明書 FAQ

関連ドキュメント


← 技術ドキュメント一覧へ戻る