Nginx でキャッシュのステータスを確認する方法
まずNginxでキャッシュを使用している場合に、ユーザのリクエストに対して、キャッシュが効いているか確認する方法を紹介します。
やることは非常に簡単で、ログにキャッシュステータスを出力するだけです。
これにより Fluentd -> Elasticsearch -> Kibana などの組み合わせでヒット率をグラフ化して改善に活かすこともできます。
1 2 3 4 5 6 7 8 9 |
http { log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" $upstream_cache_status $request_time'; } server { access_log /var/log/nginx/access.log main; } |
$upstream_cache_status がキャッシュにヒットしたかのステータスになります。
ではそのステータスの意味を以下で覚えておきましょう。
$upstream_cache_status の意味
参考:https://www.nginx.com/blog/nginx-caching-guide/
参考(ガイド)どおりではありますが、改めて記載します。
MISS
– The response was not found in the cache and so was fetched from an origin server. The response might then have been cached.BYPASS
– The response was fetched from the origin server instead of served from the cache because the request matched aproxy_cache_bypass
directive (see Can I Punch a Hole Through My Cache? below.) The response might then have been cached.EXPIRED
– The entry in the cache has expired. The response contains fresh content from the origin server.STALE
– The content is stale because the origin server is not responding correctly, andproxy_cache_use_stale
was configured.UPDATING
– The content is stale because the entry is currently being updated in response to a previous request, andproxy_cache_use_stale updating
is configured.REVALIDATED
– Theproxy_cache_revalidate
directive was enabled and NGINX verified that the current cached content was still valid (If-Modified-Since
orIf-None-Match
).HIT
– The response contains valid, fresh content direct from the cache.
よく見かけるの Nginx のキャッシュステータスは「HIT」、「BYPASS」、「MISS」、「EXPIRED」だと思います。
わかりやすく説明すると、以下のような感じです。※正式な意味は上記です。
- HIT:キャッシュが作成されており、キャッシュを返した場合
- BYPASS:キャッシュを返すかどうかの判定で「返さない= proxy_cache_bypass が 1」である場合
- MISS:キャッシュがないのでバックエンドサーバに問い合わせしたとき
- EXPIRED:キャッシュが存在するが期限切れの場合
ちなみにログに $upstream_cache_status を出力していると「 – 」というステータス表示になっている場合がありますが、
これは出力しているにも関わらず、Nginxの設定でキャッシュを使用するかどうか触れられていないためです。
例えば以下の様な場合です。
1 2 3 |
location /mypage { proxy_pass http://backends; } |
まとめ
使ったことのある方にとっては当たり前のことですが、メディア運用などにおいてキャッシュのヒット率はとても重要な指標です。
キャッシュが効いているかどうか、活用できているかどうかで捌けるアクセス数、つまりはサーバ費用が大きく変わってきます。
アクセスの捌ける量が、数倍〜数十倍になれば、サーバ費用は同じだけ下がりますし、逆もしかりです。
後々キャッシュを効かせるとアプリケーション的に問題になったりする場合もあるので早めに気にかけておくとよいと思います。