nginx のvirtual domain 毎に キャッシュする(proxy_cache_path)
nginx の proxy_cache_path はグローバルに一つしか設定できないと思ってたら、複数記載できるようなのでメモ。
環境
ubuntu 12.04
nginx 1.1.19
構成
/etc/nginx/conf.d/example1.com.conf
/etc/nginx/conf.d/example2.com.conf
にバーチャルドメインの設定を書いてるとします。
% vim /etc/nginx/nginx.conf http { (略) proxy_cache_path /var/www/cache_example1.com levels=1:2 keys_zone=example1.com:4m max_size=50m inactive=5m; proxy_cache_path /var/www/cache_example2.com levels=1:2 keys_zone=example2.com:4m max_size=50m inactive=5m; ## # Virtual Host Configs ; set it at the last. ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; (略) }
% vi /etc/nginx/conf.d/example1.com.conf upstream example1 { server 10.0.3.10:8001; } server { listen 80; server_name example1.com; (略) location / { proxy_pass http://example1/; proxy_cache example1.com; proxy_cache_key $scheme$proxy_host$uri$is_args$args; proxy_cache_valid 200 10m; } }
% vi /etc/nginx/conf.d/example2.com.conf upstream example2 { server 10.0.3.10:8002; } server { listen 80; server_name example2.com; (略) location / { proxy_pass http://example2/; proxy_cache example2.com; proxy_cache_key $scheme$proxy_host$uri$is_args$args; proxy_cache_valid 200 10m; } }
注意点としては、
- http ディレクティブの proxy_cache_pathに記載されてる keys_zone=XXXX が server ディレクティブの proxy_cache XXXX に相当する。
- proxy_cache_path は include conf/*.conf より上に書かないといけない。(そうしないとnginx ががエラー吐く。)
nginx のcache ってcache ディレクトリの中身を全部消すくらいしかcahceの消し方を(わたしは)しらないので、バーチャルドメインで複数ドメイン運用するときだと、ほかのドメインに影響でちゃいそうでいやだったんですが、なんとかなりそうです。