すこぶる.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】変数の中身を確認しデバッグする方法

Nginx で変数をログに出力する Nginx を使用していると、実際に変数の中身を確認して設定を組みたい、特定の変数の中身をログに出力して確かめたい!なんてことがあると思います。 そんなときに役立つ …

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

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

NginxからプライベートのS3にリバースプロキシ

概要 Nginx から AWS にあるプライベートな S3 のバケットにリバースプロキシしたいという要件があったため、その方法をご紹介します。 AWS にある EC2 上からであれば、IAM Role …

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

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

HTTPS化に向けてWebサーバでSSL設定をするときのコツ

概要 Webサイトのセキュリティが案じられている現状で、各サイトのHTTPS(SSL化)への移行が急速に進んでいる。 GoogleもHTTPSサイトへの移行を推奨しており、SEO観点でも大きく影響して …