Nginxをリバースプロキシとして設定する方法

Nginxをリバースプロキシとして設定するためのガイドです。インストール、サーバーブロックの設定、バックエンドサーバーへのリクエストの転送、ヘッダーの管理、およびセキュリティとパフォーマンスを強化するためのオプションのSSL/TLS設定について解説します。

Intermediate

Nginxは、リバースプロキシとしても効果的に機能する強力なWebサーバーです。リバースプロキシとして設定することで、アプリケーションサーバーの前に配置し、クライアントからのリクエストを処理して、適切なバックエンドサーバーに転送することができます。この構成により、パフォーマンス、セキュリティ、およびスケーラビリティを向上させることができます。

Nginxをリバースプロキシとして使用するメリット

  • 負荷分散:着信トラフィックを複数のバックエンドサーバーに分散します。
  • セキュリティの強化:内部ネットワーク構造やバックエンドサーバーを、クライアントからの直接アクセスから隠蔽します。
  • SSL/TLS 終端処理:HTTPSの暗号化および復号化を処理し、このタスクをバックエンドアプリケーションからオフロードします。
  • キャッシュ:静的および動的コンテンツをキャッシュし、サーバーの負荷を軽減して応答時間を短縮します。
  • 圧縮:レスポンスを圧縮し、配信を高速化します。
  • 静的コンテンツの提供:アプリケーションサーバーに負荷をかけることなく、静的ファイルを直接効率的に提供します。

1. Nginxのインストール

サーバーにNginxがまだインストールされていない場合は、お使いのディストリビューションのパッケージマネージャーを使用してインストールできます。

  • Ubuntu/Debianの場合: bash sudo apt update sudo apt install nginx
  • CentOS/RHEL/Fedoraの場合: bash sudo dnf install nginx # or yum for older versions

インストール後、Nginx サービスを起動し、起動時に自動起動するように設定します:

sudo systemctl start nginx
sudo systemctl enable nginx

ウェブブラウザで http://localhost にアクセスすることで確認できます。

2. Nginxの設定ファイルの場所

Nginxの設定ファイルは通常、 /etc/nginx/にあります。メインの設定ファイルは通常 nginx.confです。多くの場合、 sites-available ディレクトリがあり、そこには個々のサイトの設定が含まれており、それらは sites-enabled にシンボリックリンクされ、有効化されます。

3. サーバーブロックの設定

Nginxの設定内でサーバーブロックを作成または変更する必要があります。このブロックは、特定のドメインまたはIPアドレスに対するリクエストをNginxがどのように処理するかを定義します。

リバースプロキシ用の基本的なサーバーブロックは次のようになります:

server {
    listen 80; # Nginx listens on port 80 for incoming HTTP requests
    server_name your_domain.com www.your_domain.com; # Replace with your domain name

    location / {
        proxy_pass http://backend_server_ip:port; # Forward requests to your backend server
        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;
    }
}

ディレクティブの説明:

  • listen 80;: Nginxはポート80で着信HTTPリクエストをリッスンします。
  • server_name: このサーバーブロックが応答すべきドメイン名を指定します。
  • location /: このブロックは、ルートパス(/)に一致するリクエストをどのように処理するかを定義します。異なるパスに対応する、より具体的な location ブロックを作成できます(例: location /api/).
  • proxy_pass: これはリバースプロキシの核心となるディレクティブです。Nginxに対し、指定されたバックエンドサーバーのIPアドレスとポートへリクエストを転送するよう指示します。
  • proxy_set_header: これらのディレクティブは、元のクライアント情報(IPアドレスやホスト名など)をバックエンドサーバーに渡すために不可欠であり、ログ記録やアプリケーションロジックに役立ちます。

4. 設定を有効にする

もし sites-available/に新しい設定ファイルを作成した場合は、 sites-enabled/:

sudo ln -s /etc/nginx/sites-available/my_reverse_proxy /etc/nginx/sites-enabled/

5. Nginx設定のテスト

Nginxを再起動する前に、必ず設定ファイルに構文エラーがないかテストしてください:

sudo nginx -t

テストに合格すると、構文に問題がなくテストが成功したことを示すメッセージが表示されます。

6. Nginxの再読み込み

新しい設定を適用するには、Nginxを再読み込みします:

sudo systemctl reload nginx

7. リバースプロキシのテスト

Web ブラウザを開き、 http://your_domain.com (ドメインが設定されていない場合は、サーバーのIPアドレス)にアクセスします。これでNginxがリクエストをバックエンドサーバーに転送するようになり、バックエンドアプリケーションが提供するコンテンツが表示されるはずです。

この基本的な設定は、Nginxをリバースプロキシとして使用するための基盤となります。SSL/TLSの終端処理、ロードバランシング、キャッシュ、さらに高度なルーティングルールなどの機能を利用して、さらにカスタマイズすることができます。