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の消し方を(わたしは)しらないので、バーチャルドメインで複数ドメイン運用するときだと、ほかのドメインに影響でちゃいそうでいやだったんですが、なんとかなりそうです。