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