nginxのキャッシュ保存先を複数設定する

公開日時

nginxでキャッシュ設定を行う際にlocationによってキャッシュサイズやinactiveの条件を変えたかったので方法を調べてみた。

今までnginxを使う時はproxy_cache_pathは一つしか設定していなかったけど、実は複数設定ができた。

↓のようにproxy_cache_pathを複数定義して、proxy_cacheを切り替えれば、細かくキャッシュ条件を設定することが可能。

http {
  proxy_cache_path /var/cache/nginx/proxy_cache_type_a levels=1:2 keys_zone=cache_type_a:10m max_size=1000m inactive=24h;
  proxy_cache_path /var/cache/nginx/proxy_cache_type_b levels=1:2 keys_zone=cache_type_b:10m max_size=1000m inactive=30m;

  upstream app {
    server 127.0.0.1:3000;
  }

  server {
    listen 80;

    root /var/www/app/public;

    location /type_a/ {
      try_files $uri @type_a;
    }

    location /type_b/ {
      try_files $uri @type_b;
    }

    location @type_a {
      proxy_pass http://app;
      
      proxy_cache cache_type_a;
      proxy_cache_key $request_uri;
      proxy_cache_valid 200 302 24h;
      proxy_cache_valid any 10s;
      add_header X-Nginx-Cache $upstream_cache_status;
    }
    
    location @type_b {
      proxy_pass http://app;
      
      proxy_cache cache_type_b;
      proxy_cache_key $request_uri;
      proxy_cache_valid 200 302 30m;
      proxy_cache_valid any 10s;
      add_header X-Nginx-Cache $upstream_cache_status;
    }
  }
}

参考


Related #nginx

wsl2上のUbuntuにrubyの開発環境を構築する

久しぶりに手動構築した

Dockerを使ってngx_cache_purgeを試す

キャッシュ削除用モジュールのngx_cache_purgeを試した

nginxでgzip圧縮設定をしたのに反映されない現象が発生

ウイルス対策ソフトのWebアクセス保護設定の影響だった