ControllerでPC用キャッシュとスマホ用キャッシュの両方を削除する設定メモ情報科学屋さんを目指す人のメモ方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。(26)スポンサーリンクnginxをリバースプロキシキャッシュとして利用するようにしたのですが、記事を更新してもキャッシュが削除されない状態でした。Controllerプラグインを使ってキャッシュを削除するようにしたので、そのときに気が付いた事をメモしておきます。不明点もあるのですが、とりあえず動いたので、その状態を資料としてメモ。環境はCentOS+さくらのVPS+nginx(リバースプロキシ)->nginx(Webサーバ)->php-fpm->WordPressな感じです。設定を教えてあげるこのプラグインはnginxの設定によっては、プラグインをインストールするだけではさっぱり動作しません。いうと、WordPress側から、リバースプロキシとして動作しているnginxの設定は分からないからです。したがって、その分の設定はこちらがやってあげなければなりません。参考にすべきは、nginxの設定ファイルで、普通は「/etc/nginx/conf.d/default.conf」と「/etc/nginx/nginx.conf」を使っているはずです。{}」に、「proxy_cache_path」という設定項目があるはずです。私は現在次のようになっています。リバースプロキシ設定」の「キャッシュディレクトリ」に、ここに設定してあるキャッシュの場所(/var/www/did2memo.net/cache)を入力してください。「キャッシュレベル」には、「levels=」のところに書いてあるキャッシュレベル(1)を設定してください(キャッシュレベルは、ただの数字(1)だったり、コロン区切りで階層化されていたり(1:2)します)。キャッシュキー(の生成方法)実は、もう一つ教えて上げる必要があります。それが、キャッシュキー(の生成方法)です。nginxは、このキャッシュキーをキーとして使って、キャッシュファイルを探します。したがって、この設定が分からないと、特定のURLへのアクセス結果が、どこにキャッシュされているのかわからないのです。Controllerでは、そのキャッシュキーの生成方法として、「$scheme://$host$request_uri」がデフォルトで設定されているようです。これが重要な手がかりになります。私の場合は、次のように設定していました。}簡単に言えば、スマートフォンとPCとで、別のキャッシュキーを生成することで、スマートフォンとPCとが、別のキャッシュを探しに行くように設定していました。これで、wp_is_mobileなどを使ってスマートフォン用にページを工夫している場合も、上手く動作します(wp_is_mobileと同値ではないのでまだ要検証)。Controllerのデフォルトである「$scheme://$host$request_uri」とは大きく異なります。そこでまず、nginxの設定に「://」を追加して、「$scheme://$proxy_host$uri$is_args$args$mobile」にしました。「$mobile」というスマートフォンを識別する部分はどうにもなりません。消してしまったら本末転倒です(というかスマートフォンにPCのキャッシュが表示されたり、PCにスマートフォンのキャッシュが表示されたりしてしまう)。Controller側の設定を変更したいのですが、設定画面はありません。(引用元)と書いてあり、「設定画面なんてないよ」ということになっていました。nginxchampuru_get_reserse_proxy_keyフックの使い方の例などは紹介されておらず、このままではソースコードを読む必要がありますし、nginxの動作をPHPで再現しないといけないのかなぁとちらっと思いました。dogmap.jp」の記事です。ここでは、nginxの設定はよくわかりませんが、$mobileと同じような事をしていることは推測できました。そこで、それを少し改造することで解決できないかと、次のようにfunctions.phpに追加してみました。$nginxchampuru->get_cache_file($keys);}nginxの設定ファイルで自分は「@mobile」という文字列をキーに追加してスマートフォンかどうかを判定していたので、紹介されていたコードの部分を「@mobile」に変更しました(実は、「://」の追加も、このコードを見てよさそうだな、と思いました)。一つのキーを複数のキーに複製する(数を増やす)ことはできません。いうわけで、このnginxchampuru_get_cacheフィルタを使っているようでした。Controllerが上手く記事を更新した際に、PC用キャッシュとスマートフォン用のキャッシュの両方を削除してくれるようになりました。資料的メモ以下、資料としてまとまりのないメモ書きを置いておきます。いうエラーになってしまう←というかこれでプラグインが必要だと気が付いた)。Purgeプラグインは使いませんでした。Controllerでは「$scheme://$host$request_uri$mobile」相当になっていました。これで上手く動作しているとすれば、「$proxy_host」と「$host」、「$uri$is_args$args」と「$request_url」がそれぞれ同じものを指していることになるのですが、いまのところ詳しく調べてはいません。ちなみに、記事を更新した際は、その記事のURLはもちろん、「?test=test」のようなダミーのパラメータをつけたページのキャッシュも削除されているようでした。動きそうな「$scheme://$proxy_host$request_uri$mobile」や「http://did2memo.net$request_uri$mobile」ではさっぱりキャッシュ削除機能が動きませんでした。なにかトラブルが起こったら、このあたりをもっと詳しく調査する必要がありそうです。「表示中のページと単独投稿記事と単独固定ページ以外のキャッシュを削除」の日本語的な意味が分からなかったので、メモ。「自動削除のフック」には、4つの選択肢があります。これらには、関連する次の用語が割り当てられていました。none:「なし」→Noneall:「すべてのキャッシュを削除。Caches.almost:「表示中のページと単独投稿記事と単独固定ページ以外のキャッシュを削除。only.「almost」と「single」という用語から、「表示中のページと単独投稿記事と単独固定ページ以外のキャッシュを削除」は、「『表示中のページ』と『単独投稿記事と単独固定ページ』以外のキャッシュを削除」という意味になりそうです。詳しくは、「nginx-champuru/nginx-champuru.php」の「flush_cache()」を見ると分かりやすいです。「すべてのキャッシュを削除」が無難?今回いくつか設定しましたが、「すべてのキャッシュを削除」が無難で、そうするとkeyの設定なんてあまり意味なく削除されるんじゃないか、と思いますが、実はkeyの設定をちゃんとしておかないと、削除できないようです(すべてのキャッシュを削除だけ例外的にキャッシュディレクトリの中身を削除するのではなく、あくまでキャッシュを一つずつ削除するらしい。「/sitemap.xml」のような、記事でも固定ページでもトップページでも無い場合、フックが起動されても、削除されないようなので、気を付けてください。設定の変更方法などについて、解説記事をよく書いています。自分が困ったことをブログに書けば、次に困る人の参考になって、みんながみんな同じ苦労をせずに済む、というのが原点です。最近の関心は、スマホやパソコンが苦手な人の行動や思考、そしてそんな人を手助けする方法です。