【Nginx】リバースプロキシの基本設定

【Nginx】リバースプロキシの基本設定 Nginx

Nginxは高速で軽量なWebサーバーとして知られていますが、リバースプロキシとしても強力に利用できます。リバースプロキシはクライアントからのリクエストを一旦受け取り、バックエンドのアプリケーションサーバーやAPIサーバーに転送する仕組みです。ロードバランシングやキャッシュ、SSL終端などにも活用でき、Webシステムの柔軟な構成に欠かせません。ここではリバースプロキシの基本設定を紹介します。

リバースプロキシとは

リバースプロキシはクライアントからはWebサーバーに見えるが、実際にはその裏で別のサーバーに処理を中継する仕組みです。クライアントは直接バックエンドにアクセスせず、Nginxが仲介することでセキュリティや可用性が向上します。

基本的な設定例

例えば、クライアントからのリクエストをNginxが受け取り、バックエンドのアプリケーション(http://127.0.0.1:3000)へ転送する構成です。

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        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_passで転送先を指定し、proxy_set_headerでリクエストヘッダーを適切に引き継ぐのがポイントです。

複数のバックエンドを使う場合

複数のアプリケーションをパスごとに振り分けることも可能です。

server {
    listen 80;
    server_name example.com;

    location /app1/ {
        proxy_pass http://127.0.0.1:4000/;
    }

    location /app2/ {
        proxy_pass http://127.0.0.1:5000/;
    }
}

ロードバランシングの基本

Nginxのupstreamを使うと、複数のバックエンドサーバーへリクエストを分散できます。

upstream backend {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend;
    }
}

デフォルトではラウンドロビン方式で分散されます。

HTTPS環境での設定

NginxでSSL終端を行い、バックエンドにはHTTPで転送するのも一般的です。

server {
    listen 443 ssl;
    server_name example.com;

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

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
    }
}

まとめ

リバースプロキシはNginxの代表的な活用方法で、基本はproxy_passで転送先を指定し、ヘッダーを適切に設定することです。複数のバックエンドを扱う場合やロードバランシング、SSL終端などを組み合わせることで、柔軟で安全なWeb基盤を構築できます。