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のコアモジュールとは

推薦する

古典的なスネークゲームの JavaScript 実装

この記事では、古典的なスネークゲームを実装するためのJavaScriptの具体的なコードを参考までに...

MySQL 作成ルーチン権限に関する注意事項

1. ユーザーにルーチン作成権限がある場合は、プロシージャ | 関数を作成できます。 2. ユーザー...

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...

Linux カーネル デバイス ドライバー 高度な文字デバイス ドライバーのメモ

/****************** * 高度な文字デバイス ドライバー ***********...

複合主キーと複数列インデックスに遭遇した場合の MySQL 行ロックの詳細な説明

背景今日、他のプロジェクト チームと協力してシス​​テムのストレス テストを実施しているときに、プロ...

JavaScript の 7 つのデータ型の詳細な説明

目次序文:詳しい紹介:練習する:要約する序文: Python、Java、Cシリーズなど、すべての主要...

ウェブデザインの概要

<br />1998年に最初の個人ページが誕生してから2008年の今日まで、デザイン業界...

DockerにElasticsearch7.6クラスタをインストールしてパスワードを設定する方法

目次基本的な設定バージョンとDockerイメージについて始めるelasticsearch.ymlにつ...

完璧なアロエベラジェルを選ぶには?完璧なアロエベラジェルの本物と偽物の見分け方

最新のパーフェクト アロエ ベラ ジェルのパッケージ ボックスには、赤いフォントで完璧な英語の文字が...

1つの記事でJSONPの原理と応用を理解する

目次JSONPとはJSONP 原則JSONP実装1. Ajaxでクロスドメインリクエストが行われると...

MySQLからMariaDBへのスムーズな移行のための詳細な手順

1. MariaDB と MySQL の紹介1. MariaDB の紹介MariaDB は、MySQ...

Vueのコンポーネントの詳細な説明

目次1. コンポーネントの登録2. コンポーネントの使用3. 父から息子へ4. 息子から父へ5. ス...

MySQL データベースで機密データの暗号化と復号化を実装する方法

目次1. 準備2. MySQL暗号化関数方式2.1 MySQL 暗号化2.2 MYSQL 復号化3....

MySQL での外部キーの作成、制約、削除

序文MySQL バージョン 3.23.44 以降では、InnoDB エンジン タイプのテーブルは外部...

行の高さと垂直方向の配置についての深い理解

いくつかの概念行ボックス: インライン ボックスを囲むボックス。1 つ以上の行ボックスが積み重ねられ...