先日WordPressをnginxのプロキシキャッシュで高速化してみました。その後、新しい記事の投稿時などにキャッシュを消す為にngx_cache_purgeモジュールをインストールしました。それで万事解決と思っていたのですが、nginxのエラーログを見ていて、purge時に404エラーが返っていて、キャッシュが削除できていない事に気づきました。結果的には設定がミスっていただけなのですが、かなりハマったのでメモしておきます。結論から言うと、プロキシの設定を以下のように行う必要があります。何にハマっていたかというと、proxy_cache_keyの値とproxy_cache_pargeのkeyの値が合ってなかったという恥ずかしい話でした。proxy_cache_keyのデフォルト値は$scheme$proxy_host$request_uriなのですが、proxy_cache_purgeは$1$is_args$argsなので、何も考えずにその辺から値をコピってくると動かないという。$1$is_args$args;}ngx_cache_purgeの挙動を何も解っていなかったのも原因なので、もう少しだけ書いておきます。上記設定の場合に、http://taichino.com/feedのキャッシュを作って消すという手順を確認してみます。http://taichino.com/feedにアクセス/var/cache/nginx/0/4e/da6f7b5015a12fe724dc34140c8664e0というキャッシュが生成されるhttp://taichino.com/purge/feedにアクセス。Purgeプラグインは、このルールに従って順次/purge/以下のURLにアクセスして、キャッシュを消しているだけです。落ち着いたら何でも無い事にハマり倒してしまう癖が中々直らず困ったものです。