サイトアイコン ITC Media

【簡単】Nginxでリバースプロキシを設定|サンプルコード付き

(最終更新月:2023年9月)

✔当記事は以下のような方に向けて書かれています

「nginxリバースプロキシが何なのか知りたい」

「nginxリバースプロキシの設定方法が学びたい」

「nginxリバースプロキシの適用例を見て理解を深めたい」

✔当記事で提供する知識

私たちが目指すのは、nginxリバースプロキシの基本要点から詳細な設定方法、実際の運用例までを、具体的な事例に基づいてわかりやすく説明することです。

是非、記事の最後までお楽しみください。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

[itemlink post_id="33855"]

Nginxのリバースプロキシを理解するための前提知識

こちらでは、Nginxのリバースプロキシを理解するための前提知識についてお伝えしていきます。

プロキシとNginxの役割

プロキシとは、クライアントとサーバー間の通信を中継する役割を果たすもの。

その中でもNginxは、高性能なプロキシサーバーとして広く用いられています。

例えば、Webサーバーの負荷分散を図る際などに、Nginxは使用されることが多いです。

プロキシの概念とNginxの特徴を理解することで、効率的なシステム構成が可能になります。

リバースプロキシサーバーを利用する目的

リバースプロキシサーバーは、以下のような目的で使われます。

例として、外部からの不正アクセスを防ぐためにリバースプロキシを設置するケースなどが挙げられます。

使用する環境

リバースプロキシサーバーを構築する際の使用環境は、以下のようなものを考慮しましょう。

OSでは、Linux OSをベースにNginxを導入するケースが一般的です。

使用環境の選定には、将来的なスケールの拡張やセキュリティ要件を念頭に置く必要があります。

必要なツールと知識

リバースプロキシの構築には、特定のツールやスクリプト言語の知識が求められることがあります。

主なものは、Linuxのコマンドライン操作やNginxの設定ファイルの編集能力です。

具体的なツールのリストとそれらを効果的に使用するための基本的な知識についてご覧いただきます。

リバースプロキシの基本フロー

Nginxをリバースプロキシとして使用する場合の基本的なフローを、シンプルに説明します。

  1. クライアントからのリクエスト
    ユーザー(クライアント)がWebブラウザなどを使って特定のURLにアクセス。
  2. Nginxへのリクエスト
    そのリクエストはまずNginx(リバースプロキシとして設定されている)に到達。
  3. リクエストの転送
    Nginxは受け取ったリクエストを、設定に基づいてバックエンドのサーバー(例: アプリケーションサーバーやAPIサーバーなど)に転送。
  4. バックエンドの処理
    バックエンドのサーバーはリクエストを処理し、レスポンスを生成。
  5. レスポンスの転送
    生成されたレスポンスは再びNginxに戻す。
  6. クライアントへのレスポンス
    Nginxはそのレスポンスをクライアントに転送。

このフローの中で、Nginxは以下の役割を果たします。

リバースプロキシのメリット

こちらでは、リバースプロキシのメリットについてお伝えしていきます。

Nginxを使用する利点

Nginxは高速で軽量なプロキシサーバーとして知られ、とくに並行処理に優れています

優れた並行処理を可能にしているのは、そのイベント駆動アーキテクチャです。

イベント駆動アーキテクチャにより、非同期I/Oで、少数のワーカープロセスで多数の同時接続を効率的に処理できます。

対してApacheの’prefork’MPM(Multi-Processing Module)では、各接続に対して新しいプロセスを生成するので、メモリ使用量が増加してしまいます。

高速・軽量を目指すならNginxが優れているといえるでしょう。

リバースプロキシの使用メリット

リバースプロキシを使用すると、以下のようなメリットがあります。

例として、特定のIPアドレスからのアクセスを制限したり、特定のコンテンツの配信速度を上げられます。

Nginxのリバースプロキシを構築する

こちらでは、Nginxでリバースプロキシを構築する方法についてお伝えしていきます。

環境設定の安全確認

環境設定が安全化を確認します。

以下を実施しましょう。

アップデート方法はこちらを参考にしてください。

sudo apt update && sudo apt upgrade -y # Ubuntu/Debianの場合 
sudo yum update -y # CentOSの場合

またAWSを使っている場合、セキュリティグループの確認は、EC2などのクラウドサービスでの操作が必要です。

例えば、AWSコンソールにログインして以下のコマンドを使用できます。

aws ec2 describe-security-groups --group-ids sg-903004f8

このコマンドで、指定したセキュリティグループの詳細な情報が表示され、適切に設定されているか確認できます。

Webサーバー Nginxのセットアップ

Nginxのインストールと起動は以下のコマンドでおこなえます。

sudo apt install nginx  # Ubuntu/Debianの場合
sudo yum install nginx  # CentOSの場合

インストール後には、Nginxを起動しましょう。

sudo systemctl start nginx
sudo systemctl enable nginx

プロキシの構築

/etc/nginx/conf.d/

設定ファイルを作成または編集します。

以下は基本的なリバースプロキシの設定の例です。

sudo nano /etc/nginx/conf.d/default.conf

このファイルを編集して、適切な転送先とルールを設定します。

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://your_backend_server_address;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Nginxを再起動し設定を反映させます。

sudo nginx -t
sudo systemctl reload nginx

動作確認

動作確認の方法はこちら。

詳細設定方法

こちらでは、「詳細設定方法」についてお伝えしていきます。

リクエストの転送方法

リクエストの転送方法の設定は、Nginxの設定ファイルでおこないます。

location / {
    proxy_pass http://localhost:8080;
}

この設定は、リクエストをローカルの8080ポートに転送するように設定します。

リクエストヘッダの扱い

リクエストヘッダのカスタマイズもNginxで可能です。

以下のように設定します。

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;

この設定で、ホスト名と実際のクライアントIPアドレスをプロキシ先に渡します。

設定バッファの調整

バッファの設定調整は、レスポンスの速度を改善するために有用です。

proxy_buffers 16 32k;
proxy_buffer_size 64k;

これにより、バッファのサイズと数を調整し、サイトのパフォーマンスを最適化します。

よくある質問とその解答

こちらでは、「質問解決ヘルプ」についてお伝えしていきます。

よくある質問と解答

Nginxを使用してリバースプロキシを設定する際の一般的な質問とその解答を以下に示します。

リバースプロキシを設定するとき、バックエンドのサーバーのヘッダー情報をどのようにして保持できますか?

Nginxのproxy_set_headerディレクティブを使用して、リクエストヘッダーをバックエンドのサーバーに渡せます。

例えば、実際のクライアントのIPアドレスをバックエンドに渡すには、以下のように設定しましょう。

location / {
    proxy_pass http://your_backend_server_address;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

複数のバックエンドサーバーを持っている場合、Nginxでロードバランシングをどのように設定できますか?

Nginxのupstreamモジュールを使用して、複数のバックエンドサーバー間でのロードバランシングを設定できます。

以下は基本的な例です。

upstream backend_servers {
    server backend1.example.com;
    server backend2.example.com;
}

server {
    location / {
        proxy_pass http://backend_servers;
    }
}

リバースプロキシを通じての接続が遅い場合、どのような設定をチェックまたは変更すべきですか?

接続の遅延はさまざまな原因で発生する可能性があります。

以下の設定やポイントをチェックすることで、パフォーマンスの向上が期待できるでしょう。

これらの設定の他にも、ネットワークの遅延、バックエンドサーバーのパフォーマンス、Nginxサーバーのリソース制限など、多くの要因が接続の遅延に影響する可能性があります。

トラブルシューティング

何らかの問題が発生した際のトラブルシューティングは必須です。

例えば、エラーログの確認方法が挙げられます。

sudo tail -f /var/log/nginx/error.log

このコマンドにより、エラーログをリアルタイムで確認し、問題の特定と解決がおこなえます。

まとめ

当記事では、リバースプロキシサーバーの概念から設定、運用について学習してきました。

技術の進化と共に、Webサーバーやプロキシサーバーの運用はますます複雑化しています。

最新の技術動向や製品アップデートについては、公式ウェブサイトや関連ドキュメントを随時チェックすることをおすすめします。

モバイルバージョンを終了