nginxとは何か

nginxは、サーバーの負荷を効率的に分散する仕組みを提供するWebサーバーおよびリバースプロキシサーバーです。本記事では、nginxの基本的な仕組みと、その設定方法について説明します。

サーバー負荷を分散する仕組み

nginxでは、複数のサーバーをまとめて一つのグループ(upstream)として扱うことができます。これにより、負荷が一つのサーバーに集中するのを防ぎ、複数のサーバーで分散処理を行えます。

以下の設定例を見てみましょう。

upstreamの設定

以下の設定では、app1という名前で複数のサーバーをグループ化しています。

http {
    upstream app1 {
        server 192.168.1.10:8080;
        server 192.168.1.11:80;
        server 192.168.1.12:8080;
}


server {
	listen 80;
	location / {
		proxy_pass http://app1;
	} こうしとけば、upstreamのどれかにいく
}
}
  • upstream app1: サーバーグループの名前を指定します。
  • server <IPアドレス>:<ポート>: 各サーバーのアドレスとポート番号を指定します。

リクエストの振り分け

クライアントからのリクエストは、以下のようにプロキシを介してグループ化されたサーバーへ振り分けられます。

server {
	listen 80;
	location / {
		proxy_pass http://app1;
	} こうしとけば、upstreamのどれかにいく
}
  • listen 80: サーバーが外部から受け付けるポートを指定します。
  • proxy_pass http://app1: グループ化されたapp1にリクエストを転送します。

動作の流れ

  1. 外部からポート80にアクセス。
  2. nginxがリクエストを受け取り、proxy_passapp1内のいずれかのサーバーに振り分ける。
  3. サーバーがレスポンスを生成し、クライアントに返す。

例えば、次のようなサーバー構成がある場合:

  • 192.168.1.10:8080
  • 192.168.1.11:80
  • 192.168.1.12:8080

アクセスが均等に分散されるため、一つのサーバーに負荷が集中することを防ぎます。

nginxのリバースプロキシの役割

nginxは単なる負荷分散ツールではなく、リバースプロキシとしても機能します。

proxy_passの仕組み

proxy_passディレクティブは、nginxが外部リクエストの代理(プロキシ)として動作するために使用されます。これにより、nginxがクライアントとアプリケーションサーバー間の仲介役を果たします。

例えば:
:80番にアクセス -> アプリサーバへは以下のポート番号へ流す
192.168.1.10:8080;
192.168.1.11:80;
192.168.1.12:8080;

なので、flaskアプリケーションの場合は、192.168.1.10:8080; 192.168.1.11:80; 192.168.1.12:8080;
が、nginxからのリクエストを受け付けることになります。

以上のようにnginxがクライアントからのリクエストを受け取り、アプリケーションサーバーに転送します。これにより、以下の利点があります:

  • クライアントが直接アプリケーションサーバーにアクセスするのを防ぐ。
  • サーバー間で負荷を分散する。
  • セキュリティと管理性を向上させる。

nginx — Flask Documentation (2.2.x)

msiz07-flask-docs-ja.readthedocs.io

まとめ

nginxは、高負荷な環境でもスムーズなリクエスト処理を実現する重要なツールです。その負荷分散機能とリバースプロキシとしての役割を活用することで、システム全体のパフォーマンスと信頼性を向上させることができます。

次回は、さらに詳細な設定方法や応用例について解説します!