Nginx代理缓存配置详细说明

  1. 启用缓存

    • /data/nginx/cache:缓存存储路径。

    • levels=1:2:目录层级结构。

    • keys_zone=my_cache:10m:定义共享内存区域,用于存储缓存键和元数据。

    • max_size=10g:缓存最大大小。

    • inactive=60m:缓存项在60分钟内未被访问则被删除。

    • use_temp_path=off:禁用临时路径。

    • 在Nginx配置文件中,使用proxy_cache_path指令定义缓存路径和参数。

    • 示例:

      proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
  2. 配置缓存区域

    • my_cache:缓存区域名称,与keys_zone中定义的名称一致。

    • 使用proxy_cache指令指定缓存区域。

    • 示例:

      location / {
          proxy_cache my_cache;
          proxy_pass http://backend;
      }
  3. 缓存键

    • $scheme:请求协议(http或https)。

    • $proxy_host:代理服务器的主机名。

    • $request_uri:请求的URI。

    • 使用proxy_cache_key指令定义缓存键。

    • 示例:

      proxy_cache_key "$scheme$proxy_host$request_uri";
  4. 缓存有效期

    • 200 302 10m:状态码为200和302的响应缓存10分钟。

    • 404 1m:状态码为404的响应缓存1分钟。

    • 使用proxy_cache_valid指令设置缓存的有效期。

    • 示例:

      proxy_cache_valid 200 302 10m;
      proxy_cache_valid 404 1m;
  5. 缓存绕过

    • $cookie_nocache:如果请求中包含nocache的cookie,则绕过缓存。

    • $arg_nocache:如果请求参数中包含nocache,则绕过缓存。

    • 使用proxy_cache_bypass指令定义条件,满足条件时绕过缓存。

    • 示例:

      proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
  6. 缓存清理

    • my_cache:缓存区域名称。

    • "$scheme$proxy_host$1":缓存键。

    • 使用proxy_cache_purge指令清理缓存。

    • 示例:

      location ~ /purge(/.*) {
          proxy_cache_purge my_cache "$scheme$proxy_host$1";
      }

案例

http {
    proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_cache my_cache;
            proxy_pass http://backend;
            proxy_cache_key "$scheme$proxy_host$request_uri";
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;
            proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
        }

        location ~ /purge(/.*) {
            proxy_cache_purge my_cache "$scheme$proxy_host$1";
        }
    }
}
  • 该配置将请求代理到backend服务器,并使用my_cache缓存区域缓存响应。

  • 缓存键为$scheme$proxy_host$request_uri

  • 状态码为200和302的响应缓存10分钟,状态码为404的响应缓存1分钟。

  • 如果请求中包含nocache的cookie或参数,则绕过缓存。

  • 可以通过/purge路径清理缓存。

本篇文章内容来源于:Nginx代理缓存配置详细说明以及案例