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基盤を構築できます。