チームはフロントエンドとバックエンドを分離しているため、フロントエンドが Nginx とノード層を引き継ぎます。日常業務では、Nginx をかなり多く扱います。その中でも、場所は最も多く使用され、最も変更される場所です。以前は、位置の一致ルールについて漠然とした理解しかありませんでした。位置がどのように一致するかを理解するために、時間をかけて情報を調べ、この記事にまとめました。これが皆様のお役に立てば幸いです。 文法規則 場所 [ = | ~ | ~* | ^~ ] uri { ... } 場所 @name { ... } 構文は単純です。場所のキーワード、オプションの修飾子、一致する文字、そして実行するアクションを中括弧で囲んで指定します。 修飾子
マッチングプロセス リクエスト URL をシリアル化します。たとえば、%xx などの文字をデコードし、URL 内の連続する複数の / を削除し、URL 内の .、.. などを解析します。このステップはマッチングの前提条件です。 場所を表現する方法は 2 つあり、1 つはプレフィックス文字を使用する方法、もう 1 つは正規表現を使用する方法です。正規表現の場合は、その前に ~ または ~* 修飾子が付きます。 具体的なマッチングプロセスは以下のとおりです。 まず、プレフィックス文字を使用して定義された場所を確認し、最も長く一致する項目を選択して記録します。 完全に一致する場所、つまり = 修飾子を持つ場所が見つかった場合、検索は終了し、その構成が使用されます。 次に、正規表現を使用して定義された場所を順番に検索します。一致が見つかった場合は、検索を停止し、それによって定義された構成を使用します。 一致する通常の場所がない場合は、以前に記録された最も長い一致するプレフィックス文字の場所が使用されます。 上記のマッチングプロセスに基づいて、次の 2 つの洞察を得ることができます。
例 次のような構成ファイルがあるとします。 場所 = / { [ 構成A ] } 位置 / { [ 構成 B ] } 場所 /user/ { [ 構成 C ] } 場所 ^~ /images/ { [ 構成 D ] } 場所 ~* \.(gif|jpg|jpeg)$ { [ 構成 E ] } リクエスト/完全一致 A、それ以上の検索はありません。 リクエスト /index.html は B と一致します。まず、一致するプレフィックス文字を検索し、構成 B に最も長く一致するものを見つけて、次に、一致する正規表現を順番に検索します。何も見つからないため、前のタグからの最長一致、つまり構成 B が使用されます。 /user/index.html を要求すると C に一致します。まず、最長一致 C を見つけます。その背後に一致する正規表現がないため、最長一致 C が使用されます。 /user/1.jpg を要求すると E に一致します。まず、プレフィックス文字を検索して最長一致 C を見つけ、次に通常の検索を続行して一致 E を見つけます。したがって、E を使用します。 /images/1.jpg を要求すると D に一致します。まず、プレフィックス文字を検索し、最長一致 D を見つけます。ただし、特別なのは、^~ 修飾子を使用し、後続の正規表現一致検索を実行しなくなるため、D が使用されることです。ここで、先行する修飾子がない場合、最終的な一致は実際には E になります。その理由について考えてみましょう。 リクエスト /documents/about.html は B と一致します。 B は、/ で始まるすべての URL が一致することを意味するためです。上記の構成では、B のみが満たされるため、B が一致します。 場所@nameの使用 @ は名前付きの場所を定義するために使用されます。主に内部リダイレクトに使用され、通常のリクエストの処理には使用できません。使い方は以下のとおりです。 位置 / { try_files $uri $uri/ @カスタム } 場所 @custom { # ...何かをする } 上記の例では、URL にアクセスしようとして対応するファイルが見つからない場合、カスタム名の場所 (ここではカスタム) にリダイレクトされます。 名前付きの場所は、他の名前付きの場所内にネストすることはできないことに注意してください。 URL の末尾の / は必須ですか? URL 末尾の / については注意すべき点が 3 つあります。最初のポイントは場所の構成に関連していますが、他の 2 つのポイントは関連していません。 場所に / 文字が存在するかどうかは影響しません。つまり、/user/ と /user は同じです。 URL 構造が https://domain.com/ の形式の場合、末尾に / があってもリダイレクトは発生しません。ブラウザはリクエスト時にデフォルトで / を追加するためです。ただし、多くのブラウザではアドレスバーに / が表示されません。これを確認するには、Baidu にアクセスしてください。 URL 構造が https://domain.com/some-dir/ の場合。末尾の / がない場合、リダイレクトが発生します。慣例によれば、URL の末尾の / はディレクトリを表し、/ はファイルを表さないためです。したがって、/some-dir/ にアクセスすると、サーバーはそのディレクトリ内の対応するデフォルト ファイルを自動的に検索します。 /some-dir にアクセスすると、サーバーはまず some-dir ファイルを検索します。ファイルが見つからない場合は、some-dir をディレクトリとして扱い、/some-dir/ にリダイレクトして、そのディレクトリ内のデフォルト ファイルを検索します。あなたのウェブサイトがこのような状態かどうかをテストすることができます。 要約する 場所の設定には、プレフィックス文字と正規表現の 2 つの形式があります。一致を検索するときは、まずプレフィックス文字を検索し、最長の一致を選択してから、正規表現を検索します。正規表現の優先順位はプレフィックス文字の優先順位よりも高くなります。 正規表現は、設定ファイル内に出現する順序で検索されます。したがって、正規表現の順序は非常に重要です。より高度な正規表現を先頭に配置することをお勧めします。 完全一致に = を使用すると、検索順序を高速化できます。ルート ドメイン名が頻繁にアクセスされる場合は、= を使用することをお勧めします。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: JavaScript でピンボール ゲームの Web バージョンを実装する
>>: Windows ベースの MySQL 8.0.12 のインストール
目次IN が遅いのはなぜですか? INとEXISTSのどちらが速いでしょうか?効率を向上させるにはど...
テーブルとは何ですか?テーブルは、データのキャリアである HTML テーブルです。以下は比較的標準的...
ソフトウェア バージョンとプラットフォーム: MySQL-5.7.17-winx64、win7 Ho...
mysql5.7.18の解凍版はmysqlサービスを起動します。具体的な内容は以下のとおりです。 1...
以前、「Web ページにシステムに組み込まれていないフォントを埋め込む」という研究をしたことがありま...
ここでは主に、WeChat アプレットでラッキーホイール ゲームを開発する方法を紹介します。主に J...
Web デザインは科学であると同時に芸術でもあります。 Web デザイン作業は、半分は適切なプログラ...
目次MySQLクラッシュ回復プロセス1. ブラックボックス下のデータフローを更新する2. やり直しロ...
著者が MySQL を使用してユーザーを追加していたところ、ユーザー名が間違って記述されていることに...
Node.js の人気に応えて、最近、いくつかのサーバー側機能を実装するために Node.js を使...
MySQL グリーンバージョン設定コードと 1067 エラーMySQL エンコーディングを表示 ...
Microsoft は T4 テンプレートを提供していますが、使用するのが非常に難しいと思います。ス...
フォーム入力ボックスの入力をdisable属性に設定して送信すると、入力ボックスの値を取得できなくな...
導入Alibaba Cloud のような OSS ストレージ サービスを使用している場合は、サービス...
この記事ではMySQL 8.0.22のインストールと設定について記録します。具体的な内容は以下のとお...