[Vagrant, Nginx] 開発環境と本番環境でキャッシュのON,OFF切り替え

vagrant-nginx

nginxのproxy cacheを使い始めましたが、開発環境では頻繁に更新して最新のページを確認したいのでそのためにキャッシュを手動で削除しなければなりません。それでは不便なので環境ごとにキャッシュのON,OFFを切り替えられる様にしました。

NginxでキャッシュON,OFF設定

こちらのブログが非常に参考になりました。


nginxでproxy cacheのON,OFFを切り替えるディレクティブは以下の2つがあるそうです。

  • proxy_no_cache
    0以外の値のとき、キャッシュの保存を行わない
  • proxy_cache_bypass
    0以外の値のとき、キャッシュから読み込みを行わない

つまりproxy_no_cache, proxy_cache_bypassともに値が1のときはキャッシュがOFFに、値が0のときはONになるので、開発環境と本番環境のそれぞれのVagrantfileに変数を追加してChefでそれを受け取るようにしました。

Vagrantfileにキャッシュ変数追加

Vagrantfileに以下の様に追加しました。開発環境ではNGINX_DO_NOT_CACHEを1に、本番環境では0にしました。詳しくはこちら

vagrant/vb/Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

## 中略 ##

# Nginx
NGINX_DO_NOT_CACHE = 1

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  
  ## 中略 ##

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["../site-cookbooks", "../cookbooks"]
    chef.json = {
      :wp_install => {
        :user_name      => SSH_USER_NAME,
        :install_dir    => WP_INSTALL_DIR,
        :server_root    => File.join(WP_INSTALL_DIR, HOSTNAME),
        :server_name    => HOSTNAME,
        :wp_title       => WP_TITLE,
        :wp_admin_user  => WP_ADMIN_USER,
        :wp_admin_pass  => WP_ADMIN_PASS,
        :wp_admin_email => WP_ADMIN_EMAIL,
        :other_hostname => LIVEHOSTNAME,
        :language       => WP_LANG
      },
      :mysql => {
        :root_password => MYSQL_ROOT_PASSWORD
      },
      :nginx => {
        :do_not_cache => NGINX_DO_NOT_CACHE
      }
    }
    chef.add_recipe "wp-install"
  end

end

nginxの設定も追加しました。詳しくはこちら

wp-install/templates/default/nginx/sites-available/default.erb

server {
	listen   80;
	
	## 中略 ##

	location / {
		proxy_pass http://backend;
		set $do_not_cache <%= node['nginx']['do_not_cache'] %>;
		proxy_no_cache $do_not_cache;
		proxy_cache_bypass $do_not_cache;
		proxy_cache zone;
		proxy_cache_key $scheme$proxy_host$uri$is_args$args;
		proxy_cache_valid  200 1d;
	}

	## 中略 ##
	
}

vagrantから渡した値を$do_not_cache変数にセットしました。
これで開発環境ではキャッシュが効かなくなりました!
しかしキャッシュ無しだとかなり遅いですね!!