插件窝 干货文章 nginx页面缓存怎么配置

nginx页面缓存怎么配置

缓存 Cache Proxy FastCGI 678    来源:    2025-04-21

Nginx 页面缓存配置指南

Nginx 可以通过多种方式配置页面缓存,以下是常见的几种缓存配置方法:

1. 代理缓存 (Proxy Cache)

这是最常见的缓存方式,适用于反向代理场景:

http {
    # 定义缓存路径和参数
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;

    server {
        location / {
            proxy_cache my_cache;  # 使用上面定义的缓存区
            proxy_pass http://backend;  # 后端服务器地址

            # 缓存键设置
            proxy_cache_key "$scheme$request_method$host$request_uri";

            # 缓存有效期
            proxy_cache_valid 200 302 10m;
            proxy_cache_valid 404 1m;

            # 其他相关设置
            proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
            proxy_cache_background_update on;
            proxy_cache_lock on;

            # 添加缓存状态头信息
            add_header X-Proxy-Cache $upstream_cache_status;
        }
    }
}

2. FastCGI 缓存 (适用于PHP等场景)

http {
    fastcgi_cache_path /var/cache/nginx/fastcgi levels=1:2 keys_zone=fastcgi_cache:100m inactive=60m;

    server {
        location ~ \.php$ {
            fastcgi_cache fastcgi_cache;
            fastcgi_cache_key "$scheme$request_method$host$request_uri";
            fastcgi_cache_valid 200 60m;
            fastcgi_cache_valid 404 10m;
            fastcgi_cache_methods GET HEAD;
            fastcgi_pass php_fpm;

            add_header X-FastCGI-Cache $upstream_cache_status;
        }
    }
}

3. 浏览器缓存 (客户端缓存)

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
    access_log off;
}

location ~* \.(pdf|doc|docx|xls|xlsx|ppt|pptx)$ {
    expires 7d;
    add_header Cache-Control "public";
}

4. 微缓存 (Microcache)

适用于高流量网站,对动态内容进行短时间缓存:

proxy_cache_path /tmp/nginx levels=1:2 keys_zone=microcache:10m max_size=100m inactive=60m;

server {
    location / {
        proxy_cache microcache;
        proxy_cache_valid 200 10s;  # 只缓存10秒
        proxy_cache_methods GET HEAD;
        proxy_cache_key "$scheme$request_method$host$request_uri";
        proxy_pass http://backend;
    }
}

缓存清除配置

可以设置缓存清除接口:

location ~ /purge(/.*) {
    allow 127.0.0.1;
    deny all;
    proxy_cache_purge my_cache "$scheme$request_method$host$1";
}

重要参数说明

  • proxy_cache_path: 定义缓存存储路径和参数

    • levels: 缓存目录层级
    • keys_zone: 共享内存区名称和大小
    • inactive: 缓存不活跃时间后自动删除
    • max_size: 缓存最大大小
    • use_temp_path: 是否使用临时路径
  • proxy_cache_valid: 为不同响应码设置缓存时间

  • $upstream_cache_status: 可用于检查缓存命中状态

    • MISS: 未命中
    • HIT: 命中
    • EXPIRED: 过期但还在使用
    • UPDATING: 正在更新
    • STALE: 使用过期的缓存

最佳实践建议

  1. 根据内容类型设置不同的缓存时间
  2. 对静态资源设置较长的缓存时间并使用版本号或hash
  3. 对动态内容谨慎设置缓存时间
  4. 监控缓存命中率调整缓存策略
  5. 在高流量环境下考虑使用多级缓存

配置完成后,记得测试缓存是否生效,可以通过检查响应头中的X-Proxy-CacheX-FastCGI-Cache字段来确认。