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


30

この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_valid12h)が指定されたinactive値(1h)より大きい場合はどうなりますproxy_cache_pathか?どのルールに従うのでしょうか?例えば

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

ありがとう!

回答:


39

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

ドキュメントが前記、nginxのは続けるデータに関するすべてのアクティブなキー情報が格納され、その共有メモリ区域にname及びsizekeys_zoneパラメータによって構成されています。完全性の問題として、部品ごとに分解しましょう

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

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

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

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

  • proxy_cache_pathの引数inactiveは、最後の使用後に応答がキャッシュに保存される期間を指定します。古い応答であっても、それらへの要求がある場合は最近使用されたと見なされることに注意してください。

私が理解しているように、ここで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時間の有効なキャッシュ期間であっても)、nginxはパラメーターのためにオブジェクトを削除しinactiveます。


「その後、キャッシュは無効と見なされたため、nginxはバックエンドからフェッチして有効なタイマーをリセットします。」- それは面白い。だから、nginxはユーザーがフェッチしなくてもリクエストをフェッチしますか?したがって、たとえば、inactiveが365d有効で有効な場合1d、nginxは誰もそのリクエストを行わない場合でも1年間毎日キャッシュ内のリクエストをフェッチしますか?
マーティントーマ

1
いい答えですが、これらのパラメーターの一部で使用する測定単位に関するドキュメントが見つかりません。たとえば、inactiveparamsは時間の値を取りますが、h(1か月はどうですか、1日はどうですかなど)以外に使用できる値が表示されません。そして、何を指定する必要がありmax_sizeますか?バイト?1Mバイトを1Mバイト使用できますか?
スニルD.

4
@SunilD。-ここに行きます:nginx.org/en/docs/syntax.html
adamczi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.