リバースプロキシ vs ロードバランサー: Nginxでの使い分け

Backend2026-09-23TryQuickToolBox

「リバースプロキシ」と「ロードバランサー」という言葉を同じ意味で使っているのを聞いたことがあるでしょう。しかし、Nginxを設定する際には、その違いを知ることが重要です。インフラストラクチャの設計、SSLの処理、アプリケーションのスケーリング方法に影響を与えるからです。

このガイドでは、混乱を解消します。それぞれが何をするのか、どちらをいつ使うべきか、そしてNginxで明確かつ実践的な例を用いて設定する方法を学びます。

リバースプロキシとは?

リバースプロキシは、クライアントとバックエンドサーバーの間に位置します。クライアントのリクエストを受け取り、適切なバックエンドに転送し、レスポンスを返します。クライアントがバックエンドと直接通信することはありません。

一般的な用途:

Nginxは、Node.js、Python(Gunicorn/uWSGI)、Java(Tomcat)などのアプリケーションサーバーの前段にあるリバースプロキシとしてよく使用されます。

ロードバランサーとは?

ロードバランサーは、受信トラフィックを複数のバックエンドサーバーに分散します。主な目的は、可用性、スケーラビリティ、フォールトトレランスを向上させることです。

主な機能:

ロードバランサーは、ハードウェア(F5、Citrix)またはソフトウェア(Nginx、HAProxy、クラウドLB)で実現できます。Nginxのupstreamモジュールは、それを有能なソフトウェアロードバランサーにします。

リバースプロキシ vs ロードバランサー:主な違い

項目 リバースプロキシ ロードバランサー
主な目的 リクエストの転送、機能の追加(SSL、キャッシュ) 複数のサーバー間で負荷を分散
バックエンドの数 通常1つ(または少数) 複数、しばしば多数
焦点 機能性、セキュリティ、パフォーマンス スケーラビリティ、高可用性
ヘルスチェック オプション 必須

実際には、ロードバランサーは特殊なリバースプロキシです。Nginxを含む多くのツールは、両方を同時に実行できます。

リバースプロキシを使うべき場合

以下の場合にリバースプロキシを使用します:

例:ポート3000で実行されるNode.js APIで、NginxがHTTPSを処理し静的ファイルを提供する場合。

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

    ssl_certificate /etc/nginx/ssl/api.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/api.example.com.key;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

ロードバランサーを使うべき場合

以下の場合にロードバランサーを使用します:

例:ラウンドロビンを使用してNginxの背後に3つのNode.jsインスタンスを配置する場合。

upstream backend {
    server 10.0.0.1:3000;
    server 10.0.0.2:3000;
    server 10.0.0.3:3000;
}

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Nginxはリクエストを均等に分散します。ヘルスチェックやその他のパラメータを追加して、動作を微調整できます。

Nginxで両方の役割を組み合わせる

ほとんどの実際のセットアップでは、Nginxをリバースプロキシとロードバランサーの両方として使用します。例えば:

upstream app_servers {
    least_conn;
    server 10.0.0.1:3000 max_fails=3 fail_timeout=30s;
    server 10.0.0.2:3000 max_fails=3 fail_timeout=30s;
    server 10.0.0.3:3000 backup;
}

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

    ssl_certificate /etc/nginx/ssl/app.example.com.crt;
    ssl_certificate_key /etc/nginx/ssl/app.example.com.key;

    location /static/ {
        root /var/www/static;
        expires 30d;
    }

    location / {
        proxy_pass http://app_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

ここでは、NginxがSSLを終端し、静的ファイルを提供し、ヘルスチェックを備えた3つのアプリサーバー間で負荷分散を行います。

Nginxをリバースプロキシ/ロードバランサーとして使用する際のベストプラクティス

Nginxのログを分析することは、ボトルネックを特定するために重要です。Nginx Log Analyzerのようなツールは、アクセスログを解析し、遅いアップストリームやエラーを迅速に特定するのに役立ちます。

FAQ

Nginxはリバースプロキシとロードバランサーの両方になれますか?

はい。NginxはSSLを終端し、コンテンツをキャッシュし、複数のバックエンドにリクエストを同時に分散できます。upstreamブロックがバックエンドプールを定義し、proxy_passディレクティブがリクエストを転送します。

バックエンドサーバーが1つだけの場合、ロードバランサーは必要ですか?

必ずしも必要ではありません。リバースプロキシだけでもSSL、キャッシュ、セキュリティを処理できます。しかし、複数のバックエンドを持つロードバランサーを追加すると可用性が向上します—1つのサーバーが故障しても、他のサーバーがトラフィックを処理できます。

Nginxはどのようにしてリクエストを送信するバックエンドを選択しますか?

デフォルトでは、Nginxはラウンドロビンを使用します。least_conn(最小接続数)、ip_hash(クライアントIPに基づくスティッキーセッション)、またはhash(カスタムキー)などのディレクティブで変更できます。

Nginxのセットアップを最適化する準備はできましたか?まず、無料のNginxログパーサーでログを分析し、パフォーマンスの問題を発見して設定を微調整しましょう。