サーバー構築

リバースプロキシの設定【Nginxで複数アプリを1台のサーバーで運用する】

サーバー構築
記事内に広告が含まれています。

「Node.jsのアプリをポート80で公開したい」「複数のアプリを1台のサーバーで動かしたい」そんな場面で活躍するのがリバースプロキシです。この記事では、Nginxをリバースプロキシとして設定する方法を解説します。

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

リバースプロキシとは、クライアントからのリクエストを受け取り、バックエンドのサーバーに転送する仲介役のことです。受付係が来客を適切な担当者に案内するようなイメージです。

リバースプロキシを使うメリットは4つあります。ポート80/443でアプリを公開できる、複数アプリをドメイン・パスで振り分けられる、SSL終端をNginxに任せられる、そして負荷分散やキャッシュができるという点です。

基本的なリバースプロキシ設定

たとえばNode.jsアプリがポート3000で動いているとします。これをNginxでポート80から公開する設定です。

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;

        # クライアントIPとHTTPS情報をバックエンドに伝える(実運用推奨)
        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;
    }
}

X-Forwarded-ForとX-Forwarded-Protoについて: バックエンドアプリがクライアントの本来のIPアドレスやHTTPS/HTTP判定を必要とする場合に重要なヘッダーです。これがないとバックエンド側では常にlocalhost(127.0.0.1)からのアクセスに見えてしまいます。ログ記録、アクセス制限、HTTPSリダイレクト判定などに影響するため、実運用では必ず追加することを推奨します。

パスベースの振り分け

1台のサーバーで複数のアプリをパスで振り分ける設定です。

server {
    listen 80;
    server_name your-domain.com;

    location /api/ {
        proxy_pass http://localhost:4000/;
        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;
    }

    location / {
        proxy_pass http://localhost: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;
    }
}

ドメインベースの振り分け

サブドメインごとに異なるアプリに振り分けることもできます。

server {
    listen 80;
    server_name api.your-domain.com;
    location / {
        proxy_pass http://localhost:4000;
        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;
    }
}

設定の反映と確認

sudo nginx -t
sudo systemctl reload nginx

まとめ

  • リバースプロキシはNginxがバックエンドアプリへのリクエストを転送する仕組み
  • proxy_pass でバックエンドのアドレスを指定するだけで基本設定は完了
  • X-Forwarded-ForX-Forwarded-Proto を追加してクライアントIPとプロトコル情報をバックエンドに伝える
  • パスやサブドメインで複数アプリを1台のサーバーで運用できる
  • 設定変更後は nginx -t で構文チェックを忘れずに

コメント

タイトルとURLをコピーしました