【備忘録】Nginxのキャッシュをコンテンツを指定して削除する方法【Nginx】

Linux
スポンサーリンク

備忘録2連荘です。

備忘録記事が増えているということは、トラブルが頻発しているということです。

そういうことです。死ぬ

 

スポンサーリンク

目的

Nginxでキャッシュしているコンテンツについて、特定のコンテンツキャッシュだけ削除したい。

例として、

https://hogehoge.hoge/index.html

というコンテンツのキャッシュがあった場合、それだけを狙い撃ちして削除したい。

 

キャッシュクリアの方法

キャッシュファイルの場所

まず、Nginxのキャッシュがどこに保存されているかを確認します。

おそらく、nginxのコンフィグファイルに以下の記載があるはず。

proxy_cache_path [DIRパス] levels=1 key_zone=...

proxy_cache_pathという設定には色々な項目があるのですが、重要なのは書いているDIRパスです。

nginxのキャッシュは上記のDIRパスに保存されていきます。

例えば、DIRパスが

/etc/nginx/cache

だった場合、キャッシュは以下のように保存されていきます。

/etc/nginx/cache/0/f38a744d2856f0b7111150a1a21eded0

キャッシュファイル名はmd5で暗号化されているようです。

 

キャッシュ削除(すべて)

キャッシュを全て削除したいのであれば簡単です。

上記のDIRパスに格納されているファイル(ディレクトリ)を全て削除すればよいです。

# rm -rf /etc/nginx/cache/*

これでキャッシュ保存されているすべてのコンテンツを削除することができます。

 

キャッシュ削除(特定のコンテンツのみ)

しかし、今回やりたいのは特定のコンテンツのみキャッシュを削除すること。

よって、まずはその特定のコンテンツがどのキャッシュファイルなのかを探す必要があります。

ちなみに、以上のキャッシュファイルをless等で覗いてみると分かるのですが、バイナリファイルといいつつ、キャッシュの情報等をテキスト形式で保持していることが分かります。

# cat /etc/nginx/cache/0/f38a744d2856f0b7111150a1a21eded0
 KEY: http://hogehoge.hoge/index.html 
 HTTP/1.1 200 OK
 Date: Tue, 02 Jul 2019 11:11:11 GMT
 <以下略>

重要なのはこのKEYの部分。

ここで特定のコンテンツを探すことができます。

そのコマンドはこちら

# grep [コンテンツ名] -rl [キャッシュ保存DIR]

上記の例だと、

# grep "hogehoge.hoge/index.html" -rl /etc/nginx/cache/
/etc/nginx/cache/0/f38a744d2856f0b1111750a1a21eded0

って感じですね。

これで出力されたキャッシュファイルをrmで削除することで、キャッシュクリアすることができます。

 

まとめ

  • nginxで特定のコンテンツを削除するにはgrep -rlを使え!

xargeとかでつなげてあげるとキャッシュの自動削除化もできそうですね。

まあ、本当はnginxの設定でキャッシュの保持期間等を調整してあげるのが一番良いのですが・・・

 

https://amzn.to/2JgFHem
Youtubeチャンネル作成しました!

主にFPSゲームのプレイ動画を投稿しております
良ければ登録よろしくお願いいたします
Linux
スポンサーリンク
vatchをフォローする

コメント

タイトルとURLをコピーしました