web-dev-qa-db-ja.com

nginx proxy_cache_pathディレクティブについて

このnginx設定ファイルがあるとしましょう

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • keys_zone=myCache:8mはどういう意味ですか?ドキュメントではあまり言われていません:

さらに、すべてのアクティブなキーとデータに関する情報は共有メモリゾーンに格納され、その名前とサイズはkeys_zoneパラメータによって構成されます。

  • proxy_cache_validで指定されたinactive値(12h)よりも1hproxy_cache_path)の方が高い場合はどうなりますか?どのルールに従いますか?例えば.

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

ありがとう!

31
Jürgen Paul

Keys_zone = myCache:8mはどういう意味ですか?

ドキュメントによると のように、nginxはすべてのアクティブなキーを保持し、データに関する情報を共有メモリゾーンに格納します。そのnameおよびsizeは、keys_zoneパラメーターによって構成されます。完全性の問題として、部品ごとに分解してみましょう

  • /var/cache/nginxは、実際のキャッシュが格納されている場所です。フォルダー内では、キャッシュファイルはバイナリファイルでしたが、その中のhtmlタグを簡単に見つけることができます。
  • levels=1:2 is levelsパラメータは、キャッシュ内のサブディレクトリレベルの数を設定します。
  • keys_zone=myCache:8mは、最大サイズ8 MBのmyCacheという名前の共有メモリゾーンを定義していました。キャッシュのすべてのアクティブなキーとmetadataを保持します。したがって、nginxは、ページがキャッシュされているかどうかをチェックするときは常に、最初に共有メモリゾーンを調べ、次にキャッシュが存在する場合は/var/cache/nginxで実際のキャッシュの場所を探します。
  • max_sizeはキャッシュの最大サイズでした。 /var/cache/nginxのファイルサイズ。
  • inactive=1hは、キャッシュを保存できる最大非アクティブ時間を指定します。 inactiveパラメータで指定された時間内にアクセスされなかったキャッシュデータは、鮮度に関係なくキャッシュから削除されます。

キャッシュの検証と削除の仕組み

nginxメーリングリスト から取得

  • ディレクティブproxy_cache_validは、応答が有効であると見なされる(およびバックエンドへの要求なしで返される)時間を指定します。この後、応答は「古い」と見なされ、返されないか、proxy_cache_use_stale設定に依存します。

  • 引数inactiveofproxy_cache_pathは、応答がキャッシュに保存される期間を指定します最後の使用。古いリクエストであっても、リクエストがあった場合は最近使用されたものと見なされます。

私が理解しているように、nginxがどのように機能するかを示す疑似コード

リクエストが来たら

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

他のプロセスでは、キャッシュマネージャがこのロジックを実行します

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

Proxy_cache_valid(12h)がproxy_cache_pathで指定された非アクティブ値(1h)よりも高い場合はどうなりますか?

要求があり、特定のキャッシュにアクセスしている限り、そのキャッシュオブジェクトは、オブジェクトがキャッシュに入れられてから12時間後まで有効です。その後、キャッシュは無効と見なされたため、nginxはバックエンドからフェッチし、有効なタイマーをリセットします。ただし、オブジェクトが非アクティブ(アクセスされていない)が1時間を超えた場合(12時間の有効なキャッシュ期間であっても)、inactiveパラメータにより、nginxはそれを削除します

41
masegaloeh