サーバー マッチング ロジック
nginx がリクエストを実行するサーバー ブロックを決定するとき、主にサーバー ブロックの listen フィールドと server_name フィールドに焦点を当てます
listen コマンド
listen フィールドは、サーバー応答の IP とポートを定義します。listen フィールドが明示的に設定されていない場合、デフォルトの listen は 0.0.0.0:80 (root) または0.0.0.0:8080 (非ルート)
listen は次のように構成できます:
IP とポートの組み合わせ
単一の ip、デフォルトはポート 80 をリッスンします
単一ポート、デフォルトはすべての IP インターフェースをリッスンします
Unix ソケット パス
最後の項目は通常、異なるサーバー間でリクエストを渡すためにのみ使用されます
使用するサーバーを選択するためのルールは次のとおりです:
nginx まず、listen フィールドのないすべての「不完全な」 listen 命令を listen 0.0.0.0:80 に、listen 1.1.1.1 を listen 1.1.1.1:80 に、などに変換します。
nginx は、要求された IP とポートに基づいてリクエストに最も一致するサーバー ブロック リストを作成します。最初に特定の IP を指定するサーバー ブロックと一致し、次にリッスンするサーバー ブロックを選択します。ただし、どちらの場合であっても、ポートは完全に一致する必要があります
最適一致が 1 つだけの場合は、一致するサーバー ブロックが応答に使用されますそれ以外の場合は、各サーバー ブロックのserver_name ディレクティブが評価されます
繰り返しになりますが、server_name ディレクティブは、listen ディレクティブが最適な一致を見つけられなかった場合にのみ評価されます。 ##たとえば、example.com ドメイン名が 192.168.0.1 を指しており、192.168.0.1 にある nginx には次の 2 つのサーバー ブロックのみがあると想定します:
# server block 1server { listen 192.168.0.1; server_name other.com ... } # server block 2server { listen 80; server_name example.com ... }server_name ディレクティブ
listen ディレクティブに従って最適な一致が取得できない場合は、server_name ディレクティブの解析が開始されます。nginx はリクエストの「host」ヘッダーをチェックします。この値には、ドメイン名または IP アドレスが含まれていますクライアントは実際にリクエストを試みています。nginx はこの値に基づいて server_name ディレクティブと一致します。一致ルールは次のとおりです:
(1) 正確なサーバー名一致、例:
server { listen 80; server_name www.domain.com; ... }
(2) * ワイルドカードで始まる文字列:
server { listen 80; server_name *.domain.com; ... }
(3) * ワイルドカードで終わる文字列:
server { listen 80; server_name www.*; ... }
(4) 一致する正規表現:
server { listen 80; server_name ~^(?.+)\.domain\.com$; ... }
(5) 上記のいずれにも一致しない場合は、default_server が使用されます。 default_server が指定されていない場合、最初に利用可能なサーバーが選択されます。一致するホスト値がない場合に、クライアントにエラーが返されるように指定できます。他のユーザーがスパム トラフィックを Web サイトにリダイレクトするのを防ぐために使用できます。
server { listen 80 default_server; server_name _; return 444; }
nginx の非標準エラー コード 444 を返すことで、nginx がブラウザから切断されるようにします。
ロケーション マッチング ロジックlocation 構文分析
location optional_modifier location_match {
...
}
利用可能な修飾子は次のとおりです
決定ルール
1. nginx は最初に Prefixed に基づいてチェックします位置の一致 (つまり、正規表現を含まない一致)
2. 要求された URL と完全に一致する = 修飾子を使用した位置ブロックがある場合、その位置は要求に応答するために直ちに使用されます。
3. = 修飾子と一致するロケーション ブロックが見つからない場合、不正確なプレフィックスが計算され続け、指定された URI に基づいて最長一致するプレフィックスが検索され、次の処理が実行されます。 :
(1) 最長一致する場所に ^~ 修飾子があり、nginx はすぐにこの場所を使用してリクエストに応答する場合
(2) 最長一致する場所に ^~ 修飾子がない場合^~ 修飾子を使用すると、nginx は match. を一時的に保存し、その後のマッチング
4 を継続します。最長一致するプレフィックスの場所ブロックを決定して保存した後、nginx は正規表現の一致する場所 (大文字と小文字を区別します) を引き続きチェックします。 /case-insensitive). 正規表現がある場合 必要な一致が満たされた場合、リクエストされた URI に一致する最初の正規表現の場所がリクエストに応答するために選択されます
5. 正規表現がない場合要求された URI に一致する場所が見つかった場合は、以前の場所が使用されます。最長保存されたプレフィックス ロケーション応答リクエスト
補足通常、リクエストに応答するために特定の場所を使用することを選択すると、リクエストは他の場所に関係なく、その場所内で処理されます。ただし、その場所での特定の指示により、次のような新しい場所の一致がトリガーされます。 (1)try_files (2)rewrite (3)error_page
以上がNginx のサーバーと場所のマッチング ロジックは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。