1. 位置情報の利用状況の概要 ロケーションは、さまざまな処理方法に対してさまざまな種類のリクエストを見つけることができます。 1. 位置情報の利用 場所 ~* /js/.*/\.js
位置の一致順序は、「最初に正規表現に一致し、次に共通表現に一致」です。 訂正: 場所の一致順序は実際には「最初に共通に一致し、次に正規に一致」です。私がこう言うと、誰もが間違いなく反論するでしょう。なぜなら、「まず共通を合わせ、次に正規を合わせる」という原則は、誰もが慣れている「まず正規を合わせ、次に共通を合わせる」という実際の経験を説明できないからです。ここで一時的に説明できるのは、この誤解の原因は、通常のマッチングが通常のマッチングを上書きすることだということです。 2. 位置情報の使用例 場所の正規表現: 1. # 完全一致 /、ホスト名の後に文字列を続けることはできません 場所 = / { [ 構成A ] } 2.# すべてのアドレスは/で始まるので、このルールは最終的にデフォルトのリクエストと一致します # ただし、正規表現と最長文字列は場所に一致します / { [ 構成 B ] } 例: 位置 / { proxy_pass http://server_pools; } #このルールは、他のルールが要件を満たさない場合にのみ一致します。これは、一致度が最も低い最後のルールになります。上記で実装された関数は次のとおりです。たとえば、Web サイトが www.blog.com の場合、その後に何も入力しないと、 他のルールが一致しない場合、リクエストは最終的にロード バランシング プール内のサーバーに渡されます。 3.# /documents/で始まるアドレスにマッチします。マッチしたら検索を続けます # これは、次の正規表現が場所 /documents/ に一致しない場合にのみ使用されます { [ 構成 C ] } 例: 場所 /static/ { 書き直し ^ http://www.abc.com ; } #上記で実装された関数: ウェブサイトのドメイン名が www.blog.com であると仮定すると、上記の関数は、static の後にどのページがあっても (ページが存在しない可能性があります)、www.blog.com/static/ を入力するように構成されます。 その後、最終的にはウェブサイト www.abc.com にジャンプします。 4.# /documents/で始まるアドレスにマッチします。マッチしたら検索を続けます # このルールは、次の正規表現に一致しない場合にのみ使用されます 場所 ~ /documents/Abc { [ 構成 CC ] } 5.# /images/ で始まる任意のアドレスに一致します。一致が見つかったら、正規表現の検索を停止し、この正規表現を使用します。 場所 ^~ /images/ { [ 構成 D ] } 6.# gif、jpg、jpegで終わるすべてのリクエストに一致します # ただし、/images/ の下の画像に対するすべてのリクエストは、^~ がこの正規表現に到達できないため、構成 D によって処理されます。 場所 ~* \.(gif|jpg|jpeg)$ { [ 構成 E ] } 例: 7. # 文字は /images/ と一致します。下へ進むと、^~ が存在することがわかります。 場所 /images/ { [ 構成 F ] } 8.# 最も長い文字は /images/abc と一致します。下に進むと ^~ が存在することがわかります。 # FとGの配置順序は重要ではありません 場所 /images/abc { [ 構成 G ] } 9.# 設定Dが削除された場合にのみ有効になります。まず、設定Gで始まるアドレスを最も長く一致させ、下方向に検索を続け、この正規表現に一致させます。 場所 ~ /images/abc/ { [ 構成 H ] } 優先順位なしの注文: (location =) > (location フルパス) > (location ^~ パス) > (location ~,~* 通常のシーケンス) > (location 部分的な開始パス) > (/) 上記の一致結果: 上記の場所の記述によれば、次の一致例が確立されます。 / -> 設定A 完全一致、/index.html でも /downloads/download.html とは一致しない -> 構成 B Bにマッチした後、下にマッチするものがないので、Bを使用する /images/1.gif -> 構成 D F に一致し、D に一致し、/images/abc/def -> config D で停止します 最も長い一致は G で、その後 D まで進み、そこで止まります。/images/ で始まるものはすべて D に一致して停止することがわかります。FG はここでは意味がなく、H は順番が回ってきません。これは、一致順序 /documents/document.html -> config C を示すためだけのものです。 C に一致、以下に一致なし、C を使用 /documents/1.jpg -> 構成 E Cに一致し、次にEに一致する /documents/Abc.jpg -> 設定CC 最も長い一致は C であり、通常のシーケンスは E ではなく CC と一致します。 3. 実践的な使用方法の提案 したがって、実際の使用では、次のように少なくとも 3 つの一致ルール定義があると思います。 #ウェブサイトのルートと直接一致します。ドメイン名を介してウェブサイトのホームページにアクセスする方が頻繁になります。これを使用すると、処理が高速化されると公式サイトは述べています。 #これはバックエンドアプリケーションサーバーに直接転送されるか、静的ホームページになる場合があります# 最初に必要なルールの場所 = / { proxy_pass http://tomcat:8080/index } # 2 番目の必須ルールは、静的ファイル要求を処理することです。これは、http サーバーとしての nginx の強みです。# ディレクトリ マッチングまたはサフィックス マッチングの 2 つの構成モードがあり、どちらかを選択するか、両方を使用します。location ^~ /static/ { ルート /webroot/static/; } 場所 ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { ルート /webroot/res/; } #3 番目のルールは一般的なルールで、動的なリクエストをバックエンド アプリケーション サーバーに転送するために使用されます。#非静的ファイル リクエストはデフォルトで動的なリクエストであり、実際の状況に応じて把握できます。#結局のところ、人気のあるフレームワークの中には、.php や .jsp のサフィックスが付いているものはほとんどありません。location / { プロキシパス http://tomcat:8080/ } http://tengine.taobao.org/book/chapter_02.html nginx.org/en/docs/http/ngx_http_rewrite_module.html を参照してください。 2. Rewriteの使用法の概要 1. 書き換えの定義 書き換え機能は、nginx によって提供されるグローバル変数または自分で設定した変数を正規表現とフラグと組み合わせて使用し、URL の書き換えとリダイレクトを実現します。 rewrite は server{}、location{}、if{} 内にのみ配置でき、渡されたパラメータを除くドメイン名の後の文字列に対してのみ機能します。 たとえば、http://seanlook.com/a/we/index.php?id=1&u=str は /a/we/index.php のみを書き換えます。 2. rewirteの構文 正規表現の置換を書き換える [フラグ]; 相対ドメイン名またはパラメータ文字列が機能する場合は、グローバル変数マッチングを使用するか、proxy_pass リバース プロキシを使用できます。 上記から、書き換え関数と位置関数は多少似ており、どちらもジャンプを実現できることがわかります。主な違いは、rewrite は同じドメイン名内のリソースを取得するためにパスを変更するのに対し、location はアクセスを制御したり、他のマシンに proxy_pass できるパスのクラスでリバース プロキシを実行したりすることです。 多くの場合、rewrite も location に書き込まれます。実行順序は次のとおりです。 1 サーバーブロックの書き換えディレクティブを実行する 2. 位置マッチングを実行する 3 選択した場所で書き換え命令を実行する いずれかのステップで URI が書き換えられた場合、実際のファイルが見つかるまでステップ 1 ~ 3 がループで再度実行されます。ループが 10 回を超えると、500 内部サーバー エラーが返されます。 フラグ
301 と 302 は単純にステータス コードだけを返すことはできないため、リダイレクト URL も必要です。これが、戻り命令が 301、302 を返すことができない理由です。ここでの last と break の違いは少しわかりにくいです:
3.よく使われる正規表現を書き換えます。
括弧 () の間に一致する内容は後で $1 によって参照でき、$2 は 2 番目の () の内容を表します。正規表現で混乱を招くのは、\ エスケープ特殊文字です。 書き換え例 例1: http { # 画像ログ形式を定義します log_format imagelog '[$time_local] ' $image_file ' ' $image_type ' ' $body_bytes_sent ' ' $status; # 書き換えログを有効にする rewrite_log on; サーバー{ ルート /home/www; 位置 / { # 書き換えルール情報 error_log logs/rewrite.log notice; # {}を避けるためにここでは一重引用符を使用する必要があることに注意してください '^/images/([az]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4 を書き換えます。 # 上記のルールの後に「last」パラメータを追加できないことに注意してください。そうしないと、次の set コマンドが実行されません。set $image_file $3; $image_type を $4 に設定します。 } 場所 / データ { # イメージの種類とサイズを分析するためのイメージのログ形式を指定します access_log logs/images.log mian; ルート /data/images; # 以前に定義した変数を適用します。まずファイルが存在するかどうかを判断し、存在しない場合はディレクトリが存在するかどうかを判断し、存在しない場合は最後の URL にジャンプします try_files /$arg_file /image404.html; } 場所 = /image404.html { # 画像が存在しない場合は、特定の情報を返します return 404 "image not found\n"; } } /images/ef/uh7b3/test.png のようなリクエストの場合、/data?file=test.png に書き換えられ、/data の場所と一致します。まず、/data/images/test.png ファイルが存在するかどうかを確認します。存在する場合は、通常どおり応答します。存在しない場合は、tryfiles を新しい image404 の場所に書き換え、404 ステータス コードを直接返します。 例2: ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3? を書き換えます。 /images/bla_500x400.jpg などのファイル要求は、アドレス /resizer/bla.jpg?width=500&height=400 に書き換えられ、引き続き場所の一致が試行されます。 if命令とグローバル変数 if判断命令構文 if (条件) 与えられた条件を判断します。 true の場合、中括弧内の書き換えディレクティブが実行されます。if 条件は次のいずれかになります。 式が単なる変数である場合、値が空または 0 で始まる文字列であれば、false と見なされます。 例: ユーザーのデバイスがIEブラウザの場合、リダイレクト if ($http_user_agent ~ MSIE) { 書き換え^(.*)$ /msie/$1 break; } //UA に "MSIE" が含まれている場合は、リクエストを /msid/ ディレクトリに書き換えます if ($http_cookie ~* "id=([^;]+)(?:;|$)") { $id を $1 に設定します。 } //クッキーが正規表現に一致する場合、変数$idを正規表現の参照部分と同じ値に設定します。if ($request_method = POST) { 405 を返します。 } // 送信方法が POST の場合、戻りステータスは 405 (メソッドが許可されていません) になります。戻る 戻ることができない 301,302 もし($遅い){ 制限レート 10k; } //速度制限$slowはsetコマンドで設定できます if (!-f $request_filename){ 壊す; プロキシパス http://127.0.0.1; } // 要求されたファイル名が存在しない場合は、localhost にリバース プロキシします。ここでのbreakは書き換えチェックも停止します。if ($args ~ post=140){ ^ http://example.com/ を永久に書き換えます。 } //クエリ文字列に「post=140」が含まれている場合は、example.com に永続的にリダイレクトします 場所 ~* \.(gif|jpg|png|swf|flv)$ { valid_referers なしがブロックされました www.jefflei.comwww.leizhenfang.com; ($invalid_referer) の場合 { 404 を返します。 } // ホットリンク防止} グローバル変数 以下は、判断と同様に使用できるグローバル変数です。
例: ローカルホスト:88/test1/test2/test.php $ホスト:ローカルホスト $サーバーポート:88 $request_uri:http://localhost:88/test1/test2/test.php $document_uri:/test1/test2/test.php $ドキュメントルート:/var/www/html $リクエストファイル名:/var/www/html/test1/test2/test.php 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
>>: 「いいね!」文がインデックスに登録されないのはなぜですか?
1. スクロールの実装原理better-scroll のスクロール原理は、ブラウザのネイティブスクロ...
reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...
mysqladmin ツールの使用形式は次のとおりです。 mysqladmin [オプション] コ...
MySQL での SQL モードの表示と設定MySQL はさまざまなモードで実行でき、さまざまなシナ...
1. ミドルウェアの紹介1. 基本概念ElasticSearch は Lucene をベースにした検...
最近、ポーターを学んでいます。こんなに強力なものがあったなんて、今まで知らなかった気がします。クラス...
序文アプリケーションを Docker コンテナとしてサーバーにデプロイする場合、通常はネットワークと...
プリミティブ値 -> プリミティブ型Number String Boolean undefin...
Superset は、エレガントなインターフェースとデータ テーブルに基づく動的なデータ生成を主な機...
tomcat 設定ファイルから、tomcat の起動時にデフォルトで 8080 (8443)、800...
勉強中に読んだ本についてもよく聞かれます。以下は初心者におすすめの本です(私が勉強中に読んだ本です。...
mysqlは時間のかかるSQLを記録しますMySQL は、最適化と分析のために、時間のかかる SQL...
目次1. イベントの流れ1. コンセプト2. DOMイベントフロー2. イベントの委任1. イベント...
1. 基本概念 //任意のコンテナを Flex レイアウトとして指定できます。 。箱{ ディスプレイ...
クラシックな色の組み合わせの中でも、黒、白、グレーの時代を超えた魅力を否定できる人はおそらくいないで...