序章

Nginxは、世界で最も人気のあるWebサーバーの1つです。 多くの同時クライアント接続で高負荷を正常に処理でき、Webサーバー、メールサーバー、またはリバースプロキシサーバーとして機能できます。

このガイドでは、Nginxがクライアントリクエストを処理する方法を決定する舞台裏の詳細について説明します。 これらのアイデアを理解することで、サーバーとロケーションブロックの設計から当て推量を排除し、リクエストの処理を予測しにくくすることができます。

Nginxブロック構成

Nginxは、さまざまなコンテンツを提供するための構成を、階層構造で存在するブロックに論理的に分割します。 クライアントリクエストが行われるたびに、Nginxはリクエストを処理するために使用する必要がある構成ブロックを決定するプロセスを開始します。 この決定プロセスは、このガイドで説明するものです。

ここで説明する主なブロックは、serverブロックとlocationブロックです。

サーバーブロックは、定義されたタイプのリクエストを処理するために使用される仮想サーバーを定義するNginxの構成のサブセットです。 管理者は多くの場合、複数のサーバーブロックを構成し、要求されたドメイン名、ポート、およびIPアドレスに基づいて、どのブロックがどの接続を処理するかを決定します。

ロケーションブロックはサーバーブロック内にあり、Nginxが親サーバーのさまざまなリソースとURIのリクエストを処理する方法を定義するために使用されます。 URIスペースは、管理者がこれらのブロックを使用して好きな方法で細分化できます。 非常に柔軟なモデルです。

Nginxがリクエストを処理するサーバーブロックを決定する方法

Nginxを使用すると、管理者は個別の仮想Webサーバーインスタンスとして機能する複数のサーバーブロックを定義できるため、要求を満たすためにこれらのサーバーブロックのどれを使用するかを決定する手順が必要です。

これは、可能な限り最良の一致を見つけるために使用される、定義されたチェックシステムを通じて行われます。 このプロセス中にNginxが関係するメインサーバーブロックディレクティブは、listenディレクティブとserver_nameディレクティブです。

listenディレクティブを解析して、一致する可能性のあるものを見つけます

まず、NginxはリクエストのIPアドレスとポートを調べます。 これを各サーバーのlistenディレクティブと照合して、要求を解決できる可能性のあるサーバーブロックのリストを作成します。

listenディレクティブは通常、サーバーブロックが応答するIPアドレスとポートを定義します。 デフォルトでは、listenディレクティブを含まないサーバーブロックには、0.0.0.0:80(または、Nginxが通常の非[ X170X] root