質問1、スペースについて
nginxの構成はスペースに非常に敏感なので、キーワードとシンボルの前後には、スペース(または改行)を忘れないでください。典型的なシナリオは、中括弧の前後にスペースがあるif {}ステートメントです。そうしないと、予期しない動作が発生する可能性があります。
質問2:サーバーブロックの問題について
httpブロック内のすべてのサーバーブロックが現在のリクエストと一致しない場合、nginxは最初のサーバーブロックをポケット内の一致する選択アイテムとして使用します。
したがって、ほとんどの場合、404を返すなど、一致することなく要求を処理するには、共通サーバーブロックを最もサーバーブロックの一番上に配置する必要があります。
http { サーバー{ リッスン80 ; サーバー名 _; 404を 返します。 } ... }
質問3:サーバーブロックのマッチングルール、つまり、nginxはどのサーバーブロックを使用してリクエストを処理するかをどのように決定するか
機能するのは、serverブロック内の2つの構成listenおよびserver_nameです。
その中で、listenは現在のサーバーブロックが処理する[IP]:[PORT]リクエストを定義し、server_nameは現在のサーバーブロックリクエストでホストヘッダーが満たす必要がある条件を定義します。
ここに兄の説明からの抜粋があり、元のリンクはここにあります:
-
リクエストを送信するサーバーブロックを決定しようとすると、Nginxは最初に次のルールを使用して命令の特定性をリッスンしようとします:
1)Nginxはすべての不完全な最小命令をデフォルトのデフォルト値(完全:IP +ポート)で置き換えます組み合わせのデフォルト値)、各サーバーブロックのlistenコマンドは、IPアドレスとポートの組み合わせと見なすことができます。このような変換の例は次のとおり
です。a。リッスン命令のないブロックは、この値0.0.0.0:80を使用します。
b。ポートIPアドレスなしで111.111.111.111に設定されたブロックは111.111.111.111:80になりますc。IP
アドレスポートなしで8888に設定されたブロックは0.0.0.0:8888になります
2)次のNginxは1つを収集しようとしますサーバーブロックのリスト。このリストは、特定のIPとポートに最も一致するものに基づいています。つまり、一致するサーバーブロックに特定のIPアドレスがある場合、デフォルトのIPアドレスが0.0.0.0のサーバーブロックには一致しません。いずれの場合でも、サーバーブロックを選択するNginxのプロセスでは、ポートが正確に一致する必要があります。
3)最も具体的な一致が1つしかない場合、リクエストを提供するためにサーバーブロックが使用されます。同じレベルで特定の一致を持つ複数のサーバーブロックがある場合、Nginxはserver_name命令を評価し続ける必要があります。 - Nginxは、listen命令に同じレベルで複数の一致するサーバーブロックがある場合にのみ、server_name命令を評価し続けることに注意することが重要です。
-
次に、同じ特定のlisten命令を使用してリクエストをさらに評価するために、Nginxはリクエストの「ホスト」ヘッダーをチェックします。これには、クライアントが実際にアクセスしようとしたドメインまたはIPアドレスが含まれています。
Nginxは各候補サーバーモジュールのserver_name命令を調べ、最適な一致を見つけようとします。Nginxは次の式で評価されます:
1)Nginxはまず、server_nameが要求されたホストヘッダー情報と完全に一致するサーバーモジュールを見つけます。このサーバーモジュールが見つかった場合、クライアントモジュールはクライアント要求の処理に使用されます。複数の特定の一致が見つかった場合、最初の一致がサービスの提供に使用されます。
2)完全に一致するものが見つからない場合、Nginxは次に、server_nameが前のワイルドカード文字(構成の名前の先頭に*で示される)と一致するサーバーモジュールを見つけようとします。1つが見つかると、このサーバーモジュールはクライアントにサービスを提供するために使用されます。複数の一致が見つかった場合は、一致が最も長いサーバーモジュールがサービスの提供に使用されます。
3)pre-wildcardを使用しても一致が見つからない場合、nginxは次に、server_nameがpost-wildcardと一致するサーバーモジュールを見つけようとします(構成内の名前の末尾は*で示されます)。1つが見つかると、このサーバーモジュールはクライアントにサービスを提供するために使用されます。複数の一致が見つかった場合は、一致が最も長いサーバーモジュールがサービスの提供に使用されます。
4)ワイルドカードを使用しても一致が見つからない場合、Nginxは次に、正規表現(名前の前に〜で示される)でserver_nameを定義するサーバーモジュールを評価します。Hostヘッダーに一致する正規表現を持つ最初のserver_nameは、サービスを提供するために使用されます。
5)正規表現で定義されたserver_nameを持つ一致するサーバーモジュールが見つからない場合、NginxはデフォルトのIPおよびポートを持つサーバーモジュールを使用します。