全面解析 Nginx 缓存配置与清理方案(含 ngx_cache_purge 模块实战)

代码笔记6天前更新
2,509 0

🚀 Nginx 缓存配置与清理实战指南

在高并发场景下,Nginx 的缓存能力可极大减轻后端服务器压力、提升网站响应速度。但缓存配置不当或长期未清理,也可能引发资源浪费、数据不一致等问题。

全面解析 Nginx 缓存配置与清理方案(含 ngx_cache_purge 模块实战)

Nginx 缓存配置与清理实战指南

本文将带你系统了解:

  • 如何配置 Nginx 缓存

  • 如何精准清理缓存

  • 如何使用 ngx_cache_purge 模块进行缓存控制


🔧 一、Nginx 缓存配置实例详解

✅ 1. 在主配置文件中定义缓存路径

http {
    proxy_temp_path /dev/shm/cache/proxy_temp_dir;
    proxy_cache_path /dev/shm/cache/proxy_cache_dir levels=1:2 keys_zone=cache_one:512m inactive=30m max_size=5g;
}

关键参数解释:

  • proxy_temp_path:临时缓存目录,用于缓冲未完全接收的响应数据

  • proxy_cache_path:实际缓存存放路径,指定缓存目录、层级、命名空间和大小限制

  • levels=1:2:控制缓存文件子目录结构,优化大量小文件的读写效率

  • keys_zone=cache_one:512m:在共享内存中为缓存 key 分配空间(如 512MB)

  • inactive=30m:缓存未被访问后保留30分钟

  • max_size=5g:设置最大缓存空间,超出后触发 LRU 删除


✅ 2. 虚拟主机中配置缓存策略(静态资源缓存)

server {
    listen 80;
    server_name abc.xyz.com;

    location ~*\.(js|html|gif|jpg|jpeg|png|css|ico)$ {
        proxy_pass http://127.0.0.1:90;
        proxy_cache cache_one;
        proxy_cache_key "$host:$server_port$request_uri";
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_cache_valid 200 20m;
        add_header X-Cache $upstream_cache_status;
    }
}

该配置可以有效缓存静态资源 20 分钟,并通过响应头 X-Cache 告知是否命中缓存。


🧹 二、Nginx 缓存清理方式大全

🛠️ 方式一:使用 Shell 脚本批量清理缓存

推荐使用交互式脚本 nginx_cache_clean.sh,支持按类型、文件名、目录等方式灵活清理缓存文件。

find /path/to/cache -type f | xargs rm -f

或者使用更人性化的脚本清单操作(略去脚本内容,详见文章顶部原脚本)。


🧩 方式二:引入 ngx_cache_purge 模块实现 URL 级清理

安装步骤简述:

  1. 下载模块源码并解压:

wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar xf ngx_cache_purge-2.3.tar.gz
  1. 查看原有 nginx 编译参数:

/usr/local/nginx/sbin/nginx -V
  1. 重新编译 nginx(注意:只 make,不要 make install!)

./configure ... --add-module=/root/ngx_cache_purge-2.3
make
  1. 替换 nginx 可执行文件并重启服务。


✅ 使用 purge 清理指定缓存资源

配置虚拟主机允许访问 /purge 路径清理缓存:

location ~ /purge(/.*) {
    allow 127.0.0.1;
    deny all;
    proxy_cache_purge cache_one $host$1$is_args$args;
}

清理操作示例:

访问图片:
http://abc.xyz.com/static/img/logo.png

清除缓存:
http://abc.xyz.com/purge/static/img/logo.png

⚠️ 若清理失败返回 404,检查以下配置点:

  • proxy_cache_key 是否与清理路径一致

  • location ~ /purge 的匹配位置是否在其它规则前


🔄 三、开发环境禁用缓存配置

为避免浏览器静态资源缓存干扰开发调试,可加入如下配置:

location ~.*\.(js|css|html|png|jpg)$ {
    add_header Cache-Control no-cache;
}

这样,刷新页面即可强制重新加载资源,避免调试困扰。


✅ 总结:缓存是性能利器,也是风险点

Nginx 的缓存配置强大灵活,但也需配合缓存清理机制,做到:

  • 高性能:合理使用 proxy_cache

  • 高可控:按需清理、按状态过期

  • 易调试:开发环境禁用缓存防止误判

💡 建议开发/生产环境使用不同缓存策略,定期检查缓存命中率和空间使用。

© 版权声明

暂无评论

本文暂时没有评论,来添加一个吧(●'◡'●)