Nginx Node.jsプロキシ設定

NginxをNode.jsアプリケーションの本番リバースプロキシとして設定する方法を解説。PM2クラスターモード統合、静的アセットのオフロード、エラーページに対応。

Proxy

詳細な説明

Node.jsをNginxの背後で実行することは、本番環境のベストプラクティスとして広く推奨されています。NginxがSSL終端、静的ファイル配信、接続バッファリングを担い、Node.jsプロセスはアプリケーションロジックに専念できます。

基本的なNode.jsプロキシ

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

    location / {
        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;
        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_cache_bypass $http_upgrade;
    }
}

静的アセットの直接配信

静的ファイルをNode.jsを経由させずにNginxから直接配信します。Nginxはカーネルレベルのファイル転送を使用し、Node.jsのイベントループのオーバーヘッドを回避するため、大幅に高速です:

location /static/ {
    alias /var/www/app/public/;
    expires 30d;
    add_header Cache-Control "public, immutable";
}

location / {
    proxy_pass http://127.0.0.1:3000;
}

PM2クラスターモード統合

PM2でNode.jsプロセスをクラスターモードで管理する場合、異なるポートで実行する全ワーカーインスタンスにロードバランスするupstreamブロックを定義します:

upstream node_app {
    server 127.0.0.1:3000;
    server 127.0.0.1:3001;
    server 127.0.0.1:3002;
    server 127.0.0.1:3003;
    keepalive 64;
}

keepalive 64 ディレクティブはバックエンドへの永続的な接続プールを維持し、各プロキシリクエストのTCPハンドシェイクオーバーヘッドを排除します。

大きなリクエストボディの処理

Node.js APIは大きなJSONペイロードやファイルアップロードを受け取ることがよくあります。client_max_body_size ディレクティブを増やして対応します:

client_max_body_size 50m;

カスタムエラーページ

Node.jsアプリケーションがダウンまたは再起動中の際に、ブランドエラーページを配信して専門的なユーザー体験を提供します:

proxy_intercept_errors on;
error_page 502 503 504 /maintenance.html;
location = /maintenance.html {
    root /var/www/errors;
    internal;
}

Trust Proxy設定

Expressなどのフレームワークを使用する場合、app.set('trust proxy', true) を設定して、Nginxが設定した X-Forwarded-* ヘッダーをフレームワークが正しく読み取れるようにします。これにより req.ip が実際のクライアントIPを返し、req.protocol が内部HTTPプロキシ接続ではなく元のHTTPS接続を反映します。

ユースケース

Express.js、Next.js、Fastifyアプリケーションを本番環境にデプロイし、NginxでSSL処理、静的アセット配信、グレースフルなエラーハンドリングを行います。

Try It — Nginx Config Generator

フルツールを開く