【備忘録】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の設定でキャッシュの保持期間等を調整してあげるのが一番良いのですが・・・

 

Nginx ポケットリファレンス
Amazonで鶴長 鎮一, 馬場 俊彰のNginx ポケットリファレンス。アマゾンならポイント還元本が多数。鶴長 鎮一, 馬場 俊彰作品ほか、お急ぎ便対象商品は当日お届けも可能。またNginx ポケットリファレンスもアマゾン配送商品なら通常配送無料。

コメント

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