nginxリバースプロキシの概念を理解したら、次は実際の設定方法を習得することが重要です。
nginx.confへのproxy_passディレクティブの記述・upstreamブロックによるバックエンド定義・SSL対応の設定など、基本的な設定パターンを習得することでnginxリバースプロキシを実際の環境で活用できるようになります。
本記事ではnginxリバースプロキシの基本的な設定方法・手順・書き方について詳しく解説していきます。
nginxリバースプロキシの設定方法:基本的な結論
それではまず、nginxリバースプロキシを設定するための基本的な手順と設定ファイルの構造について解説していきます。
nginxリバースプロキシの設定は主に「/etc/nginx/nginx.conf」または「/etc/nginx/conf.d/」配下の設定ファイルに記述します。
基本的な設定の流れは、serverブロックでリスン(待受)するポートとドメインを定義し、locationブロックでURLパターンに応じたproxy_passを設定するという構造です。
最もシンプルなリバースプロキシ設定例
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
上記の設定では、ポート80番で受信したリクエストをすべてローカルのポート3000番(Node.jsなど)に転送します。
proxy_set_headerディレクティブでオリジナルのホスト名とクライアントIPをバックエンドに伝達しており、バックエンドが正しいホスト名・クライアントIPを認識できるようにする重要な設定です。
upstreamブロックによるバックエンド定義
複数のバックエンドサーバーへの負荷分散を行う場合は、upstreamブロックを使ってバックエンドプールを定義します。
upstreamを使ったロードバランシング設定例
upstream backend_servers {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
server 192.168.1.12:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
デフォルトではラウンドロビン方式でリクエストが分散されます。
upstreamブロックにweightパラメータを追加することで重み付け分散が可能になり、性能の異なるサーバーへの適切な負荷配分が実現できます。
HTTPS対応のSSL設定
続いては、nginxリバースプロキシでHTTPSを有効にするSSL設定を確認していきます。
SSL証明書の設定
Let’s EncryptなどのSSL証明書をnginxに設定することで、クライアントとnginx間の通信をHTTPSで暗号化できます。
HTTPS対応のnginx設定例
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
X-Forwarded-Protoヘッダーを追加することで、バックエンドがHTTPSからのアクセスかHTTPからのアクセスかを正確に判断できるようになります。
HTTPからHTTPSへのリダイレクト設定
ポート80番(HTTP)へのアクセスをポート443番(HTTPS)にリダイレクトする設定も一般的に行います。
HTTPをHTTPSにリダイレクトする設定
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
この設定により、HTTP経由でアクセスしたユーザーを自動的にHTTPSにリダイレクトできます。
nginxの設定適用と確認コマンド
続いては、設定ファイルの文法確認と反映のための基本コマンドを確認していきます。
設定の文法チェックとリロード
nginx設定ファイルを編集後は、必ず文法チェックを行ってから反映させることが重要です。
nginxの設定確認・反映コマンド
設定ファイルの文法チェック:sudo nginx -t
設定の反映(サービス再起動なし):sudo nginx -s reload
nginxの起動:sudo systemctl start nginx
nginxの状態確認:sudo systemctl status nginx
「nginx -t」で文法エラーがないことを確認してから「nginx -s reload」でダウンタイムなしに設定を反映させることが運用のベストプラクティスです。
| コマンド | 役割 |
|---|---|
| nginx -t | 設定ファイルの文法チェック |
| nginx -s reload | 設定のリロード(ダウンタイムなし) |
| systemctl start nginx | nginxの起動 |
| systemctl stop nginx | nginxの停止 |
| systemctl status nginx | nginxの状態確認 |
まとめ
本記事では、nginxリバースプロキシの基本設定方法・upstreamによるロードバランシング・SSL設定・設定反映コマンドについて解説しました。
proxy_passディレクティブによる転送設定・upstreamブロックによる負荷分散・HTTPS対応のSSL設定という3つの基本パターンを習得することで、実際のウェブシステムでnginxリバースプロキシを活用できるようになります。
設定変更の際は必ず「nginx -t」で文法確認を行い、「nginx -s reload」でダウンタイムなしに反映させることで安定した本番環境の運用が実現できます。
基本設定を土台として、キャッシュ設定・WebSocket対応・高度な負荷分散設定などの応用にも取り組んでいきましょう。