すこぶる.net

技術系備忘録など

nginx

【Nginx】$upstream_cache_status-キャッシュステータスの見方

投稿日:

Nginx でキャッシュのステータスを確認する方法

まずNginxでキャッシュを使用している場合に、ユーザのリクエストに対して、キャッシュが効いているか確認する方法を紹介します。
やることは非常に簡単で、ログにキャッシュステータスを出力するだけです。
これにより Fluentd -> Elasticsearch -> Kibana などの組み合わせでヒット率をグラフ化して改善に活かすこともできます。

$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 a proxy_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, and proxy_cache_use_stale was configured.
  • UPDATING – The content is stale because the entry is currently being updated in response to a previous request, and proxy_cache_use_stale updating is configured.
  • REVALIDATED – The proxy_cache_revalidate directive was enabled and NGINX verified that the current cached content was still valid (If-Modified-Since or If-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の設定でキャッシュを使用するかどうか触れられていないためです。
例えば以下の様な場合です。

 

まとめ

使ったことのある方にとっては当たり前のことですが、メディア運用などにおいてキャッシュのヒット率はとても重要な指標です。
キャッシュが効いているかどうか、活用できているかどうかで捌けるアクセス数、つまりはサーバ費用が大きく変わってきます。
アクセスの捌ける量が、数倍〜数十倍になれば、サーバ費用は同じだけ下がりますし、逆もしかりです。

後々キャッシュを効かせるとアプリケーション的に問題になったりする場合もあるので早めに気にかけておくとよいと思います。

-nginx
-, ,

執筆者:

関連記事

Nginxでconfigチェックした時にSSLエラーがでる「SSL_CTX_use_PrivateKey_file」

Nginxの設定ファイルが正しく記述されているかテストするときに、「nginx -t」コマンドを実行しテストします。 その実行時、下記のようなSSLに関するエラーが出ました。 [crayon-662a …

【Nginx】DoS対策_limit_req_zone

Nginx で DoS 対策を行う方法 Web サイトを公開するにあたり、Nginx で簡単な DoS 攻撃対策を行う方法を紹介します。特別な方法ではなく最初から Nginx にある機能の紹介です。 …

【Nginx】キャッシュ作成時のバックエンドへのリクエストをproxy_cache_lockで制限する

概要 Nginx でキャッシュの有効期限が切れたとき、一勢にリクエストがバックエンドに流れることになります。。 そうなると、当然バックエンドサーバの負荷が大きくなりサービス障害につながるので注意が必要 …

【Nginx】Amazon S3へリバースプロキシ

Nginx から Amazon S3 へリバースプロキシ 今回は Nginx から Amazon S3 へリバースプロキシする方法について触れたいと思います。 ( 以前はプライベートな S3 へのリバ …

【Nginx】add_headerを複数箇所に記載すると消える(上書きされる)

Nginx でadd_headerを複数箇所に書く際の注意点 Nginxの設定ファイルでヘッダーを追加する場面は当然あると思います。 そんなとき server ディレクティブで add_header …