「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-ForとX-Forwarded-Protoを追加してクライアントIPとプロトコル情報をバックエンドに伝える- パスやサブドメインで複数アプリを1台のサーバーで運用できる
- 設定変更後は
nginx -tで構文チェックを忘れずに



コメント