Nginxで特定のキャッシュを手作業で掘り当てる
Nginxが速い理由の一つでもある強力なキャッシュですが、スクリプトテストやページデザインをしているとキャッシュが邪魔になる時があります。
そんなときにはcacheディレクトリをまるごと削除してnginx -s reload
なんてしてましたが、ある程度ページが増えてくるとそうもいかなくなってきます。
そこで、非常に原始的な方法ですが一番理解しやすくて、いろいろと応用が効きそうな方法で削除してみました。
Nginxキャッシュ構造の簡単な説明
$ echo -n "http://host.example.com/" | md5 aae337ac0aaeb61700542b3db5643c7c
FreeBSDではデフォルトでmd5が入っていたのでそれを使ってます。
Linux等の場合はmd5sum
だと思います。
これでキャッシュが消えるわけではありません。
MD5でハッシュ変換されるだけです。
FastCGI設定時にfastcgi_cache_path
に書いたlevels=1:2
という部分、あれおまじないじゃなかったんですね。
cacheディレクトリの中を覗くと更に2段階ディレクトリがあります。
cache
┗━ a b c d e f 0 1 2 ← 1階層目
┗ ab be c7 50 7d ← 2階層目
これが先程のMD5ハッシュの末尾3文字になっています。
aae337ac0aaeb61700542b3db5643c7c
fastcgi_cache_path
の
┌ 1階層目の文字数は1文字
levels=1:2
└ 2階層目の文字数は2文字
この2階層目のディレクトリc7の中に、ハッシュ値がファイル名となって保存されていますので、それを削除すれば無事にキャッシュが消えました。
$ echo -n "http://host.example.com/" | md5 aae337ac0aaeb61700542b3db5643c7c $ cd cache/c/c7 $ ls aae337ac0aaeb61700542b3db5643c7c $ rm aae*
fastcgi_cache_pathのlevelsについて
fastcgi_cache_path
の設定で、レベルは1~3階層、値(文字数)は1~2文字を設定できるようです。
最小設定だと16個、最大設定で16,777,216個のディレクトリになるって事ですかね。
Nginxのドキュメント
(英語ですがGoogle翻訳が素晴らしくなったので、Chromeで開いて翻訳すると快適です)
Module ngx_http_fastcgi_module
ディスカッション
コメント一覧
まだ、コメントがありません