NGINX は、リバース プロキシ サーバーとして広く使用されている、多用途で高性能な Web サーバーです。リバース プロキシは、クライアント要求を 1 つ以上のバックエンド サーバーに配信する仲介役です。この設定により、負荷分散、セキュリティの向上、高可用性の提供が可能になります。NGINX をリバース プロキシとして使用すると、Web サービスのスケーラビリティと信頼性を強化できます。
このガイドでは、NGINX でリバース プロキシを作成する方法を示し、クライアント要求をバックエンド サーバーに効率的にルーティングするために必要な構成手順について説明します。
Nginx でリバース プロキシを作成して構成する
Nginx で基本的なリバース プロキシを設定する
まず、Nginx をリバース プロキシとして設定するには、Nginx 設定ファイルにアクセスします。通常、このファイルは /etc/nginx/nginx.conf にあります。sudo Nano を使用するなど、好みのテキスト エディターで開きます。
sudo nano /etc/nginx/nginx.conf
構成ファイル内で、http ブロックに注目してください。ここで、リバース プロキシ設定の基礎となるサーバー ブロックを挿入します。サーバー ブロックは、指定されたポート (通常はポート 80) で HTTP トラフィックをリッスンします。このブロック内の location/directive は、Nginx に着信要求の処理方法を指示します。proxy_pass ディレクティブを使用して、これらの要求を IP アドレスまたはホスト名で指定されたバックエンド サーバーにリダイレクトします。
たとえば、構成は次のようになります。
http {
...
server {
listen 80;
location / {
proxy_pass http://backendserver_address;
}
}
}
backendserver_address をバックエンド サーバーの実際のアドレスに置き換えることを忘れないでください。この簡単な設定により、Nginx はすべての受信 HTTP 要求を指定されたバックエンド サーバーに転送するように指示されます。
Nginx での高度なリバース プロキシ設定
より高度な設定では、リバース プロキシの追加の側面を構成する必要がある場合があります。これには、負荷分散、SSL 終了、キャッシュの設定が含まれます。
負荷分散の実装
複数のバックエンド サーバーを運用している場合、Nginx は受信トラフィックをそれらのサーバーに分散し、パフォーマンスと信頼性を向上させることができます。負荷分散を行うには、proxy_pass ディレクティブを変更して、upstream ブロックで定義されたサーバー グループを指すようにします。例:
http {
upstream backend_servers {
server backend1.example.com;
server backend2.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend_servers;
}
}
}
この構成により、Nginx は backend1.example.com と backend2.example.com の間で負荷を分散できます。
SSL終了の設定
SSL 終了の場合、サーバー ブロックがポート 443 でリッスンし、SSL 証明書とキー ファイルの場所が含まれていることを確認します。構成は次のようになります。
server {
listen 443 ssl;
ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://backendserver_address;
}
}
この設定により、Nginx は SSL 接続を処理し、リクエストをバックエンド サーバーに渡す前に復号化できるようになります。
変更の最終決定
Nginx を設定したら、次のコマンドで設定の構文エラーをテストします。
nginx -t
テストに合格したら、次のコマンドを使用して Nginx をリロードし、変更を適用します。
sudo systemctl reload nginx
この手順により、現在の接続を中断することなく変更が有効になります。
追加学習: Nginx プロキシ ヘッダー値の設定
Nginx をリバース プロキシとして構成する場合、プロキシ ヘッダー値を正しく設定することが重要です。これらのヘッダーは、元のクライアント要求の詳細をバックエンド サーバーに伝えるために重要です。この情報には、クライアントの IP アドレス、要求の元のプロトコルなどが含まれます。これらのヘッダーを適切に設定すると、バックエンド サーバーが要求に適切に応答するために必要なコンテキストを確保できます。
プロキシヘッダーを理解する
プロキシ ヘッダーは、クライアントの元のリクエストに関する情報を運ぶため、リバース プロキシの設定に不可欠です。この情報は、バックエンド サーバーが受信リクエストの処理について十分な情報に基づいた決定を下すために必要です。たとえば、クライアントの元の IP アドレスを知ることは、ログ記録、分析、またはセキュリティの目的で重要になる場合があります。
一般的なプロキシ ヘッダー構成
Nginx で設定できる一般的なプロキシ ヘッダーには次のようなものがあります。
X-Real-IP
: このヘッダーは、元のクライアントの IP アドレスをバックエンド サーバーに渡すために使用されます。X-Forwarded-For
: に似ているX-Real-IP
このヘッダーには、クライアントの IP を含む、リクエストが通過したすべてのサーバーのリストが含まれます。X-Forwarded-Proto
: このヘッダーは、クライアントの元のリクエストで使用されたプロトコル (HTTP または HTTPS) を示します。
Nginx でのプロキシ ヘッダー設定の実装
Nginx 構成でこれらのヘッダーを設定するには、サーバー ブロック内の location ブロックを変更する必要があります。次に、これらのヘッダーを設定する方法の例を示します。
server {
listen 80;
location / {
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 http://backendserver_address;
}
}
この設定では、$remote_addr と $scheme は、Nginx がそれぞれクライアントの IP アドレスとリクエストのスキーム (HTTP または HTTPS) を自動的に入力する変数です。
プロキシ ヘッダーのベスト プラクティス
プロキシ ヘッダーを構成するときは、転送される情報のセキュリティと正確性を考慮することが重要です。潜在的なスプーフィングを防ぐために、バックエンド サーバーが、これらのヘッダーが Nginx リバース プロキシから送信された場合にのみ信頼するように構成されていることを確認してください。
結論
NGINX をリバース プロキシとして適切に構成することで、Web インフラストラクチャを最適化し、パフォーマンス、セキュリティ、スケーラビリティを向上させることができます。構成を定期的に監視して調整し、最適な負荷分散と応答時間を確保してください。NGINX を使用してリバース プロキシを実装すると、クライアント要求を管理し、Web サービスの高可用性を維持するための堅牢なソリューションが提供されます。