チームはフロントエンドとバックエンドを分離しているため、フロントエンドが 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 のインストール
目次序文1. ignore を挿入2. 重複キーの更新時3. を置き換える要約する序文Mysql は...
タブ: カテゴリ + 説明タグバー: カテゴリ => ユーザーに現在地と目的地を知らせる1. ...
1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...
1. MavenをダウンロードするMaven 公式サイト: http://maven.apache...
この記事では、MySQL インストールの詳細なチュートリアルを記録し、全員と共有します。 1. バー...
序文MySQL は、クライアント/サーバー構造に基づく、高速、高性能、マルチスレッドのオープン ソー...
1. 準備1.1 service.bat を含む tomcat 圧縮パッケージをダウンロードします。...
目次1. 背景: 2. デザインのアイデア: 3. 起動スクリプトを書く4. イメージを構築する5....
この記事では、マルチカラムレイアウトドラッグを実装するためのVueの具体的なコードを参考までに共有し...
目次同一起源ポリシーAjax リクエストの制限: Ajaxは自身のサーバーにのみリクエストを送信でき...
リンク: https://qydev.weixin.qq.com/wiki/index.php?ti...
初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...
さまざまな理由で、誰もが MySQL を再インストールする必要があると思います。 MySQL と Q...
この記事の例では、商品詳細ページ機能を実現するためのVueの商品タブの具体的なコードを参考までに共有...
Tomcatの設定まずTomcatをインストールするTomcatのインストールは、Tomcatのイン...