Nginx コンテンツ キャッシュと共通パラメータ設定の詳細

Nginx コンテンツ キャッシュと共通パラメータ設定の詳細

使用シナリオ:

プロジェクトのページでは、頻繁に変更されず、個別のカスタマイズも伴わない大量のデータを読み込む必要があります。リクエストごとにデータを動的に生成すると、リクエストのルーティングとパラメータに基づいて結果をキャッシュするのと同じパフォーマンスが得られません。Nginx キャッシュを使用すると、リクエスト速度が大幅に向上します。

ベース

コンテンツ キャッシュを有効にするには、proxy_cache_path と proxy_cache を設定する必要があります。前者はキャッシュ パスと構成を設定するために使用され、後者はキャッシュを有効にするために使用されます。

http {
 ...
 proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

 サーバー{
 proxy_cache マイキャッシュ;
 位置 / {
  proxy_pass http://localhost:8000;
 }
 }
}

対応するパラメータの説明:

1. キャッシュに使用されるローカルディスクディレクトリは /path/to/cache/ です。

2.levels は、/path/to/cache/ に 2 レベルの階層ディレクトリを設定します。多数のファイルを 1 つのディレクトリに配置すると、ファイル アクセスが遅くなる可能性があるため、ほとんどの展開では 2 レベルのディレクトリ階層を推奨します。レベル パラメータが設定されていない場合、NGINX はすべてのファイルを同じディレクトリに配置します。

3.keys_zone は、キャッシュ キーとメタデータを格納するために使用される共有メモリ ゾーンを設定します。これは、タイマーの目的と多少似ています。キーのコピーをメモリに配置すると、NGINX はディスクを検索せずにリクエストが HIT か MISS かをすばやく判断できるため、検索速度が大幅に向上します。 1MB のメモリ空間には約 8,000 個のキーを保存できるため、上記で構成した 10MB のメモリ空間には約 80,000 個のキーを保存できます。

4. max_size はキャッシュの上限を設定します (上記の例では 10G)。これはオプションです。値を指定しないと、キャッシュは継続的に増加し、使用可能なディスク領域をすべて占有することになります。キャッシュがこの制限に達すると、プロセッサはキャッシュ マネージャーを呼び出して、最も最近使用されていないファイルを削除し、キャッシュ領域をこの制限以下に減らします。

5.inactive は、アイテムがアクセスされずにメモリ内に残っていられる時間を指定します。上記の例では、ファイルが 60 分以内に要求されなかった場合、ファイルの有効期限が切れているかどうかに関係なく、キャッシュ マネージャーはファイルをメモリから自動的に削除します。このパラメータのデフォルト値は 10 分 (10m) です。非アクティブなコンテンツは期限切れのコンテンツとは異なることに注意してください。 NGINX は、cache-control ヘッダーで指定された期限切れのコンテンツ (この場合は Cache-Control:max-age=120) を自動的に削除しません。期限切れのコンテンツは、指定された非アクティブ時間内にアクセスされなかった場合にのみ削除されます。期限切れのコンテンツにアクセスすると、NGINX は元のサーバーからそのコンテンツを更新し、対応する非アクティブ タイマーを更新します。

6. NGINX は最初に、キャッシュ用のファイルを一時ストレージ領域に配置します。use_temp_path=off コマンドは、これらのファイルをキャッシュするときに同じディレクトリに書き込むように NGINX に指示します。ファイル システム内のデータの不要なコピーを回避するために、このパラメータをオフに設定することを強くお勧めします。 use_temp_path は、NGINX バージョン 1.7 および NGINX Plus R6 で導入されました。

最後に、proxy_cache ディレクティブは、場所の部分 (この場合は /) に一致する URL のコンテンツのキャッシュを有効にします。また、server セクションに proxy_cache ディレクティブを追加することもできます。これにより、独自の proxy_cache ディレクティブを指定していない場所内のすべてのサーバーにキャッシュが適用されます。

Nginx キャッシュ関連プロセス

キャッシュに関与する NGINX プロセスがさらに 2 つあります。

  • キャッシュ マネージャーは定期的に起動して、キャッシュの状態を確認します。キャッシュ サイズが proxy_cache_path の max_size パラメータで設定された制限を超えると、キャッシュ マネージャーは最近アクセスされたデータを削除します。 2 回のキャッシュ マネージャーの起動の間に、キャッシュされたデータの量が構成されたサイズを一時的に超える場合があります。
  • キャッシュ ローダーは、NGINX の起動後に 1 回だけ実行されます。以前にキャッシュされたデータに関するメタデータを共有メモリ領域に読み込みます。キャッシュ全体を一度にロードすると、起動後の最初の数分間は NGINX のパフォーマンスを低下させるほどのリソースが消費される可能性があります。これを回避するには、proxy_cache_path ディレクティブに次のパラメータを含めて、キャッシュの反復読み込みを構成します。
    • loader_threshold – 反復処理の継続時間(ミリ秒単位)(デフォルトは 200)
    • loader_files - 1 回の反復中にロードされるアイテムの最大数 (デフォルトでは 100)
    • loader_sleeps - 反復間の遅延(ミリ秒単位)(デフォルトは 50)

次の例では、反復は 300 ミリ秒間、または 200 個の項目が読み込まれるまで続きます。

proxy_cache_path /data/nginx/cache keys_zone=one:10m loader_threshold=300 loader_files=200;

その他の一般的なパラメータ

設定例:

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

サーバー{
 ...
 位置 / {
  proxy_cache my_cache;
  # proxy_cache_key "$host$request_uri$cookie_user"; proxy_cache_min_uses 3;
  proxy_cache_methods GET HEAD POST;
  プロキシキャッシュの有効時間 200 302 10 分;
  proxy_cache_valid 404 1m;
  # proxy_cache_valid 任意 5m; proxy_pass http://localhost:8000;
 }
}

対応するパラメータの説明:

  • proxy_cache_key は、キャッシュ キーを指定して、キーを計算するときに使用するリクエスト特性を変更します。これは推奨されません。たとえば、ドメイン名、リクエスト URL、およびユーザー クッキーをキーとして使用すると、ページが異なるユーザーに対して n 回キャッシュされることになります。ほとんどの場合、このような操作は必要ありません。
  • proxy_cache_min_uses は、応答がキャッシュされる前に同じキーを使用する必要があるリクエストの最小数です。
  • proxy_cache_methods は、キャッシュするリクエストメソッドのレスポンス値を指定します。デフォルト値は GET と HEAD です。他のメソッドを追加する場合は、上記の例のように一緒にリストする必要があります。
  • proxy_cache_valid は、応答ステータス コードのキャッシュ時間です。この例では、ステータス コードごとにキャッシュ時間を指定することも、 any を使用してすべてのステータス コードをキャッシュすることもできます。

キャッシュをクリアする

HTTP PURGE メソッドを使用したリクエストを識別し、一致する URL に対応するキャッシュを削除するには、事前に設定を追加する必要があります。

1. http {} コンテキストに、$request_method 変数に依存する $purge_method などの新しい変数を作成します。

http {
 ...
 $request_method $purge_methodをマップする{
  パージ1;
  デフォルト 0;
 }
}

2. location {} ブロックで、キャッシュが設定されている場合は、proxy_cache_purge パラメータを導入して、キャッシュ要求をクリアする条件を指定します。たとえば、前の手順では、$request_methodを指定します

サーバー{
 聞く 80;
 サーバー名 www.example.com;

 位置 / {
  proxy_pass https://localhost:8002;
  proxy_cache マイキャッシュ;

  proxy_cache_purge $purge_method;
 }
}

設定して有効にした後、キャッシュを無効にするパージ要求を送信できます。例:

curl -X PURGE -D – https://www.example.com/*

この例では、パブリック URL 部分 (アスタリスク ワイルドカード文字で指定) を持つリソースが削除されます。ただし、これらのキャッシュ エントリはキャッシュから完全に削除されるわけではありません。非アクティブと判断されるまで (proxy_cache_path の inactive パラメータによって決定)、またはキャッシュが消去されるまで (proxy_cache_path の purge によって決定)、またはクライアントがアクセスを試行するまで、ディスク上に残ります。

参考リンク:

  • Nginx キャッシュの使用に関する公式ガイド
  • Nginx コンテンツ キャッシュのドキュメント

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • Nginxとブラウザキャッシュの扱い方
  • Nginx サーバーでローカル ブラウザ キャッシュを設定する簡単な方法を説明します。
  • Nginxサーバのブラウザローカルキャッシュと仮想マシンの関連設定
  • オペレーターが知っておくべき 18 個の Nginx プロキシ キャッシュ構成のヒント (どれを知っていますか?)
  • nginx キャッシュサーバーに静的ファイルを設定する方法
  • Nginx で proxy_cache を有効にする方法
  • Nginx リバース プロキシとキャッシュおよびキャッシュのクリア方法
  • nginx キャッシュがキャッシュされない原因と解決策
  • nginx ベースのブラウザネゴシエーションキャッシュプロセスの詳細な説明

<<:  Mybatis+mysqlはストアドプロシージャを使用してシリアル番号実装コードを生成します。

>>:  node.jsのコアモジュールとは

推薦する

MySQL クエリ キャッシュとバッファ プール

1. キャッシュ - クエリキャッシュ次の図は、MySQL 公式サイトから提供されています: MyS...

MySQL 5.5 の導入に関する問題

MySQL の導入現在、会社ではプラットフォーム運用を通じてMySQLを導入しています。金曜日、プラ...

JSで実現したページサイドバーの効果に関する研究

目次発見: ディスプレイアニメーションの応用実装:記事の1行目を表示する効果を実現する方法実際、その...

startup.bat をダブルクリックすると Tomcat がクラッシュする問題の解決方法の詳細な説明

Tomcat を学習したばかりのプログラマーにとって、これはよくある間違いです。 1. 環境変数の問...

MySQLデータベースでスロークエリログを有効にする方法の詳細な説明

データベースはスロークエリログを有効にします設定ファイルを変更する設定ファイルmy.iniに次の2つ...

Linux環境でユーザーにsudo権限を追加する方法

sudo 設定ファイルsudo のデフォルトの設定ファイルは /etc/sudoers です。一般的...

Tomcatのデフォルトプログラム公開パスの使用と変更についての説明

tomcat7 のデフォルトのプログラム公開パスは tomcat/webapps/ROOT/ です。...

ボタンの権限判定を実装するためのVueカスタムv-has命令

アプリケーションシナリオバックグラウンド管理システムを例にとると、各ユーザーには異なるボタン権限があ...

ローカルで起動したときに Vue プロジェクトがクッキーを保持できない問題を解決する

vueプロジェクトをパッケージ化してサーバーにデプロイし、正常にログインできるが、ローカルで起動する...

fastdfs+nginxクラスタ構築の実装

1. fastdfs の紹介1. fastdfsとは何かFastdfs は軽量のオープンソース分散フ...

ハイパーリンクに関するいくつかの質問

ポテトチップスパーティーのこのエピソードに参加して、何人かの友人に会えてとても嬉しいです。思いがけず...

HTML でフォーム コントロールを無効にする 2 つの方法: readonly と disabled

Web ページを作成する過程では、フォームがよく使用されます。しかし、フォーム上のコントロールを変更...

CSS3のwebkit-box-reflectを巧みに使用して、さまざまな動的効果を実現します。

かなり前の記事で、 -webkit-box-reflectプロパティについて説明しました。リフレクシ...

概要ページでのフロートとクリアフロート

1. フロート: 主な目的は、テキストを画像の周囲に折り返す効果を実現することです。また、複数列レイ...

Tomcat+Mysql の高同時実行構成の最適化の説明

1.Tomcatの最適化構成(1)Tomcatのcatalina.batを変更するJavaをサーバー...