Nginx 設定の落とし穴: location と proxy_pass が「/」で終わるかどうかに必ず注意してください

Nginx は、オープンソースの高性能、高信頼性の Web およびリバース プロキシ サーバーであり、ホット デプロイメントをサポートしています。ほぼ 7*24 時間、中断することなく実行できます。数か月実行しても再起動する必要はありません。サービスが提供されている場合は、ソフトウェア バージョンをホット アップデートしてください。Nginx にとって最も重要な考慮事項はパフォーマンスです。メモリの使用量が少なく、強力な同時実行機能があり、最大 50,000 の同時接続をサポートできます。最も重要なのは、Nginx は無料で商用化可能であり、設定と使用が比較的簡単であることです。

nginx がプロキシを構成するときに、いくつかの重要なポイントが無視されることがよくありますが、位置一致リクエストの URL に「/」が付いている場合と付いていない場合の違いは何でしょうか? ここで広めさせてください

1. ロケーション構成

1. 基本的な紹介

場所の設定は、リクエストの URL、つまり ngnix の $request_uri 変数と一致するために使用されます。その設定形式は次のとおりです。

場所 [スペース | = | ~ | ~* |^~|!~ | !~* ] /uri/ {}

 2. 位置照合順序

(1) 位置一致形式ルールのプレフィックスは次のとおりです。

  • = で始まる: は完全一致を示します
  • ^~ で始まる: これは正規表現ではないことに注意してください。その目的は、正規表現よりもよく一致することです。場所が最も一致する場合、正規表現の検出は実行されなくなります。
  • ~ で始まります: 大文字と小文字を区別する正規の一致を示します。
  • ~* で始まる: 大文字と小文字を区別しない正規の一致を示します
  • !~ && !~*: 大文字と小文字を区別する一致しない正規表現と、大文字と小文字を区別しない一致しない正規表現を示します。

(2) location にプレフィックスがない場合は、通常の文字列一致となります。次に例を示します。

  • /uri/ 通常の文字列マッチング
  • / 絶対パスのルート ディレクトリが一致します。他に一致するものがない場合は、すべてのリクエストが一致します。

(3) 一致検索の優先順位は以下のとおりです(上から順に優先順位が低くなります)。

知らせ:

  • 一致が成功すると、一致は直ちに停止され、リクエストは現在の一致ルールに従って処理されます。
  • 検索を優先するということは、ヒットを優先するという意味ではありません。
  • 文字列一致が最初に検索されますが、最長一致のみが記録され (^~ が最長一致の場合は、直接ヒットし、通常の検索は停止します)、その後、通常の一致の検索が続行されます。一致する場合は通常の一致がヒットし、通常の一致がない場合は最長の文字列一致がヒットします。
  • 最初の一致 =
  • 2番目に一致します^~
  • その後、設定ファイルの順序に従って定期的なマッチングを実行します。
  • 最後に、ユニバーサル マッチングのために / に渡されます。

(場所 =) > (場所の完全なパス) > (場所 ^~ パス) > (場所 ~,~* の通常のシーケンス) > (場所の部分的な開始パス) > (/)

3. マッチングパターンとシーケンスの例

  • location = /uri: = の先頭は完全一致を示し、完全に一致する場合にのみ有効になります。
  • location ^~ /uri: ^~ は、URL パスで正規表現の前にプレフィックス マッチングを実行します。
  • location ~ :pattern~ は、大文字と小文字を区別する正規の一致を示します。
  • location ~*: pattern~* の先頭は、大文字と小文字を区別しない正規の一致を示します。
  • location /uri: 修飾子がなければ、接頭辞の一致も意味しますが、通常の一致の後、通常の一致がない場合は、最長ルールがヒットします。
  • location /: ユニバーサル一致。他の場所と一致しないリクエストは一致します。これはスイッチのデフォルトと同等です。

4. 場所が「/」で終わるかどうか

ngnix では、位置はあいまい一致を実行します。

  • 末尾に「/」がない場合、location/abc/def は /abc/defghi リクエストに一致するか、/abc/def/ghi などにも一致します。
  • 「/」で終わる場合、location/abc/def/ は /abc/defghi リクエストに一致できませんが、/abc/def/anything のようなリクエストにのみ一致します。

2. proxy_pass プロキシルール(「/」で終わるかどうか)

(1) proxy_pass の設定時に、絶対パスに相当する次の URL に / を追加すると、Nginx はその場所に一致するパス部分をプロキシ URI に追加しません。

たとえば、次の構成では http://IP/proxy/test.html にアクセスし、最終的なプロキシ URL は http://127.0.0.1/test.html です。

(2) proxy_pass の設定後に / がない場合、Nginx は一致するパス部分をプロキシ URI に追加します。

たとえば、次の構成では http://IP/proxy/test.html にアクセスし、最終的なプロキシ URL は http://127.0.0.1/proxy/test.htm です。

おすすめ

転載: blog.csdn.net/duansamve/article/details/132788598