ホーム 記事一覧

nginx リバースプロキシの構築手順 — プロキシとの違いもわかりやすく解説

nginx リバースプロキシの構築手順 — プロキシとの違いもわかりやすく解説

この記事でわかること

  • リバースプロキシが何かがわかる
  • プロキシサーバーとの違いがわかる
  • Ubuntu で nginx リバースプロキシを立てられる
  • SSL(HTTPS)を設定できる

まず知っておきたい用語

用語 意味
プロキシサーバー クライアント側に置かれる中継サーバー。「 filttring して Internet に出ていく」
リバースプロキシ サーバー側に置かれる中継サーバー。「外から来たリクエストを内側に転送する」
nginx 高速・軽量な Web サーバー。リバースプロキシとしても広く利用されている
SSL/TLS 通信を暗号化する仕組み。HTTPS で使われる
Let’s Encrypt 無料の SSL 証明書を発行してくれるサービス

リバースプロキシとは何か?

まずプロキシサーバーから理解しよう

プロキシサーバーは、** filttring の中継所** です。

[PC(オフィス)] → [プロキシ] → [Internet]
       ↑                  ↑
  ここから出発        ここで検閲・ filttring してから外へ

** filttring の目的:**

  • 社内の不正サイトへのアクセスを防ぐ
  • 通信をキャッシュ(保存)して_SPEED_ を上げる
  • 外部から社内の IP アドレスを隠す

次にリバースプロキシを見てみよう

リバースプロキシは、サーバー側の守護者 です。

[ユーザー(Internet)] → [nginx(リバースプロキシ)] → [アプリサーバー(内側)]
        ↑                           ↑                         ↑
   外から訪問     ここで受け止めて中へ転送     実際のアプリが動いている

** filttring の目的:**

  • アプリサーバーを直接 Internet に公開しない(セキュリティ)
  • SSL(HTTPS)を一元管理する
  • 複数のアプリを1つのドメインで配信する
  • 負荷分散してリクエストを分散する

プロキシ vs リバースプロキシ — 違いまとめ

プロキシサーバー リバースプロキシ
置く場所 クライアント(PC側) サーバー側
守るもの クライアント(PC) サーバー
** filttring の方向** 内 → 外 外 → 内
主な用途 アクセス filttring・キャッシュ セキュリティ・負荷分散・SSL
利用者 企業・組織( filttring のため) Web サーバー管理者(配信のため)

なぜ nginx が選ばれるのか

nginx は2004年に公開された軽量な Web サーバーです。以下の理由で世界中のサーバーで利用されています。

  • メモリ消費が少ない: Apache の約1/4のメモリで同等の処理が可能
  • 非同期イベント駆動: 多数の同時接続を効率的に処理
  • リバースプロキシ機能が標準内蔵: 追加モジュール不要
  • SSL/TLS 対応が充実: HTTPS の設定が簡単
  • 設定がシンプル: ファイルベースの設定で管理しやすい

Ubuntu で nginx リバースプロキシを構築する

ステップ 1: nginx のインストール

sudo apt update
sudo apt install -y nginx

インストール後、自動的に nginx が起動します。ブラウザでサーバーの IP アドレスにアクセスすると、nginx のウェルカムページが表示されます。

ステップ 2: ファイアウォールの設定

sudo ufw allow 'Nginx Full'
sudo ufw enable

Nginx Full は HTTP(80番)と HTTPS(443番)の両方を許可します。

ステップ 3: リバースプロキシの設定ファイルを作成

ここでは example.com がバックエンドアプリ(127.0.0.1:3000 で稼働)をリバースプロキシする設定を作成します。

sudo nano /etc/nginx/sites-available/example.com

以下の内容を貼り付けます:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

各行の意味:

意味
proxy_pass http://127.0.0.1:3000 バックエンドのアプリに転送
proxy_http_version 1.1 HTTP/1.1 を使用(Keep-Alive対応)
proxy_set_header Host $host 元のホスト名を伝える
proxy_set_header X-Real-IP 実際のクライアント IP を伝える
proxy_set_header X-Forwarded-For 経由した IP のリストを伝える
proxy_set_header X-Forwarded-Proto HTTP/HTTPS の種別を伝える
proxy_connect_timeout バックエンドへの接続タイムアウト
proxy_read_timeout バックエンドからの応答待ちタイムアウト

ステップ 4: 設定を有効にする

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

nginx -t で構文エラーがないか確認し、問題なければリロードします。

ステップ 5: SSL(HTTPS)の設定

Let’s Encrypt で無料の SSL 証明書を取得します。

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot が自動で以下を行います:

  1. SSL 証明書を取得
  2. nginx の設定を HTTPS 対応に変更
  3. HTTP → HTTPS のリダイレクトを設定
  4. 証明書の自動更新を設定

ステップ 6: 証明書の自動更新を確認

sudo certbot renew --dry-run

エラーが出なければ、自動更新が正しく設定されています。

よくある使い方

複数アプリを1つのドメインで配信

server {
    listen 443 ssl http2;
    server_name example.com;

    # メインアプリ
    location / {
        proxy_pass http://127.0.0.1:3000;
        include proxy_params;
    }

    # API
    location /api/ {
        proxy_pass http://127.0.0.1:8080;
        include proxy_params;
    }

    # 管理画面
    location /admin/ {
        proxy_pass http://127.0.0.1:9000;
        include proxy_params;
    }
}

WebSocket のプロキシ

location /ws/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
}

静的ファイルのキャッシュ

location /static/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_cache_valid 200 10m;
    add_header Cache-Control "public, max-age=3600";
}

トラブルシューティング

症状 原因と対処
502 Bad Gateway バックエンドアプリが起動していない。ss -tuln | grep 3000 で確認
504 Gateway Timeout タイムアウトが短い。proxy_read_timeout を増やす
リダイレクトループ proxy_set_header X-Forwarded-Proto $scheme が抜けていない
SSL 証明書エラー DNS が正しく設定されていない。A レコードを確認

まとめ

  • プロキシ は「 filttring のフィルター」、リバースプロキシ は「サーバーのガードマン」
  • nginx は軽量・高機能で、リバースプロキシに最適
  • SSL は Let’s Encrypt + Certbot で無料・自動化可能
  • 設定はシンプルで、初心者でも扱いやすい

おすすめ書籍

以下の書籍で、nginx の基礎から実践的な運用まで学べます。