網元(AWS+nginx+wordpress)でキャッシュが消えないときの対処法、リバースプロキシCacheの設定変更
2015 April 14
AWSの仮想サーバEC2を利用するときに、チューニング済みの nginx + WordPress 環境を提供してくれるAMIMOTOですが、画像やcssファイル、jsファイルなどで強いキャッシュにハマってしまい苦戦したのでその対処法をメモ。
1, Nginx Cache Controller プラグインでキャッシュを削除
AMIMOTO で wordpress をインストールすると最初から有効化されているプラグイン「Nginx Cache Controller」でキャッシュを削除できます。
ツールバーの「Nginx Cache」ページへ。
キャッシュ削除の設定、キャッシュ削除の有効化で「Yes」にチェックを入れてページ下の「Save Changes」。
タイトル横の「すべてのキャッシュを削除」ボタンをクリックでキャシュを削除できます。
それから、「キャッシュの有効期限」の各項目を 86400 sec から 0 sec に変更しておきます。
このプラグイン ver.1.1.2 以降から、レスポンスヘッダに Last Modified(最終更新日時を通知)をつけるかどうかの設定ができるようになったようなので、ついでにここも「Yes」にチェックも入れておきます。
このプラグインは開発中は停止しておいてもいいかもしれません。
ただ、これだけでは画像や css,スクリプトファイルのキャッシュが消えない場合も。
消えなかったら2へ。
2, サーバーから、cache フォルダを削除
サーバーに sshログインし、cache データの保存先に移動
cd /var/cache/nginx/
このディレクトリ内には、「proxy_cache」と「proxy_temp」ディレクトリが入っています。
この、「proxy_cache」ディレクトリを削除(rm)しちゃいます。
rmコマンド、どきどきしますが「proxy_cache」ディレクトリはまた自動的に作成されるので、思い切って消します。
$ sudo rm -rf proxy_cache/
これでもキャッシュが残っていたり、開発時など毎回削除するのが面倒な場合は3へ。
3, nginx.conf ファイルで cache の有効時間を変更
nginx の設定ファイルである nginx.conf ファイルを編集します。
重要な設定ファイルなので、バックアップもとっておきましょう。
nginx.conf を nginx.conf.org としてコピー
$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org
nginx.conf を編集
$ sudo vim /etc/nginx/nginx.conf
ファイル内のプロキシキャッシュ設定箇所、proxy_cache_path 箇所の「inactive」パラメーターの数値を変更します。
「inactive」で設定した時間を越えたキャッシュ情報は、自動的に削除されます。
今回は1m(1分)に変更してみました。
# proxy cache proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=czone:32m max_size=256m inactive=1m;
開発期間が終わったら、1d(1日)とか7d(1週間)など、サイトによっては長い期間に変更しておくといいかもしれません。
上書き保存したら nginx を再起動
$ sudo /etc/init.d/nginx restart
これで AMIMOTO の強いキャッシュに対応できると思いますが、もしもっと良い方法があったら教えてください。
とってもいいかんじにチューニングしてくれてある AMIMOTO ですが、やっぱり運用するサイトによって自分で最適な設定ができるようになりたい・・・プロキシキャッシュについてしっかり勉強しなければと感じました!
今回参考にした記事
AWS + Nginx + WordPressのAMIMOTO開発時キャッシュが消えない時の対処法
Nginx をリバースプロキシ(キャッシュ) として使ってみた