この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
)よりも1h
(proxy_cache_path
)の方が高い場合はどうなりますか?どのルールに従いますか?例えば.
proxy_cache_valid 200 302 12h;
proxy_cache_valid 404 302 1h;
ありがとう!
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はそれを削除します 。