当前位置: 首页 > news >正文

详细介绍:【Nginx】怎样清除 Nginx 的缓存?

Nginx 有强大的缓存功能,主要用于反向代理缓存(proxy cache),也可以用于 FastCGI、uWSGI 等后端服务的缓存,以及静态文件的缓存控制。

Nginx 缓存的主要作用是:

  1. 减轻后端服务器压力:当多个请求访问同一个资源时,Nginx 可以直接从缓存中返回内容,而无需每次都请求后端服务器。
  2. 提高响应速度:从磁盘(或内存)读取缓存文件通常比请求后端服务器更快。

Nginx 缓存的类型

  1. 反向代理缓存 (Proxy Cache):这是最常用和最重要的缓存类型。Nginx 作为反向代理,将后端服务器(如 Apache, Node.js, PHP-FPM)的响应存储起来。
  2. FastCGI/uWSGI/SCGI/Memcached 缓存:Nginx 可以缓存这些特定后端服务的响应。
  3. 浏览器缓存 (Client-side Cache):Nginx 可以通过设置 HTTP 头(如 Cache-Control, Expires, Last-Modified, ETag)来指导客户端浏览器缓存资源。这虽然不是 Nginx 自身存储缓存,但它控制了客户端如何缓存。
  4. 静态文件缓存:Nginx 在服务静态文件时,也能通过上述 HTTP 头来优化其在浏览器端的缓存。

如何清除 Nginx 缓存

清除 Nginx 缓存主要有以下几种方法,取决于你清除的是哪种类型的缓存以及你的 Nginx 配置:

1. 清除 Nginx 反向代理缓存 (Proxy Cache)

Nginx 的反向代理缓存通常存储在文件系统中。

a) 手动删除缓存文件 (最直接)

这是最直接、最粗暴但有效的方法。你需要知道缓存存储的路径。

  • 查找缓存路径
    在你的 Nginx 配置文件(通常是 nginx.conf 或在 sites-available/your_site.conf 中)中查找 proxy_cache_path 指令。
    例如:

    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;

    这里的 /var/cache/nginx 就是缓存目录。

  • 删除缓存文件
    连接到你的服务器,使用 rm -rf 命令删除缓存目录下的所有文件。
    警告rm -rf 是一个非常强大的命令,使用时请务必小心,确保路径正确,以免误删重要文件。

    sudo rm -rf /var/cache/nginx/*
    # 或者更精确地删除子目录内容
    # sudo rm -rf /var/cache/nginx/0/*

    注意:在 Nginx 运行过程中删除缓存文件可能会导致一些文件句柄问题。更安全的方法是先停止 Nginx,删除后再启动 Nginx,但这会造成服务中断。对于生产环境,不推荐频繁使用此方法。

b) 使用 Nginx 缓存清除模块 (ngx_cache_purge)

这是最优雅和推荐的方法,允许你按需、精确地清除特定 URL 的缓存,而无需停止 Nginx 服务或手动删除文件。

  • 安装模块
    ngx_cache_purge 模块不是 Nginx 核心模块,你需要重新编译 Nginx 并加入此模块,或者使用 Nginx Plus 版本(Nginx Plus 内置了缓存清除功能)。
    如果你使用的是 CentOS/Ubuntu 的预编译 Nginx,可能需要下载 Nginx 源码,然后用 --add-module=/path/to/ngx_cache_purge 参数重新编译。

  • 配置 Nginx
    在你的 serverlocation 块中配置一个专门用于清除缓存的 location

    http {# 定义缓存区域proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m max_size=1g;server {listen 80;server_name example.com;# 正常代理location / {proxy_pass http://backend_server;proxy_cache my_cache;proxy_cache_key "$scheme$request_method$host$request_uri";proxy_cache_valid 200 302 10m; # 缓存10分钟}# 缓存清除接口location ~ /purge(/.*) {allow 127.0.0.1; # 只允许本地清除# deny all; # 阻止其他IP访问proxy_cache_purge my_cache $scheme$request_method$host$1;# $1 捕获 /purge/ 后面的路径,用于指定要清除的URL}}
    }
  • 清除缓存
    配置完成后,当你需要清除 http://example.com/some/path/file.html 的缓存时,你可以向 http://example.com/purge/some/path/file.html 发送请求(例如,使用 curl 命令)。

    curl -X GET http://example.com/purge/some/path/file.html
    # 或者对于需要POST请求的资源
    # curl -X GET http://example.com/purge/some/path/post_result

    Nginx 收到此请求后,会删除匹配 proxy_cache_key 的缓存文件。

c) 缩短缓存有效期 / 不缓存 (Cache Invalidation)

如果你只是想确保下次请求获取到最新内容,而不是立即删除文件,可以通过调整缓存策略:

  • proxy_cache_valid:临时将缓存有效期设置得非常短(例如 1s0s),然后重新加载 Nginx 配置。

    proxy_cache_valid 200 302 1s; # 缓存1秒

    这样,缓存很快就会失效,Nginx 会重新请求后端。

  • proxy_no_cache / proxy_cache_bypass:通过设置特定条件来跳过缓存。
    例如,当你检测到特定的请求头时,不使用缓存:

    map $http_x_no_cache $no_cache {default 0;"true" 1;
    }
    proxy_no_cache $no_cache; # 如果 X-No-Cache 头为 true,则不缓存
    proxy_cache_bypass $no_cache; # 如果 X-No-Cache 头为 true,则绕过缓存

    然后发送 curl -H "X-No-Cache: true" http://example.com/your_page.html 即可获取最新内容。

2. 清除浏览器缓存 (客户端缓存)

Nginx 无法直接清除用户浏览器中的缓存。这是客户端的行为。但你可以通过以下策略让浏览器知道缓存已过期或内容已更新:

  • 版本化 URL (Cache Busting)
    这是最可靠的方法。当你的静态文件(CSS, JS, 图片)更新时,改变其 URL。
    例如,将 /css/style.css 变成 /css/style.css?v=1.2.3/css/style.12345.css
    这样,即使浏览器缓存了旧的 /css/style.css,也会请求新的 URL。
  • 设置短的或不缓存的 Cache-Control
    对于你希望总是获取最新内容的资源(例如 HTML 页面),在 Nginx 中设置:
    add_header Cache-Control "no-cache, no-store, must-revalidate";
    add_header Pragma "no-cache";
    expires 0;
    这样浏览器就不会缓存这些资源,或者每次都会向服务器验证。
  • 用户手动清除
    告诉用户按 Ctrl + F5 (Windows/Linux) 或 Cmd + Shift + R (Mac) 进行强制刷新,或者在浏览器设置中清除缓存。
3. 重启 Nginx (不推荐作为主要清除缓存方法)

重启 Nginx 本身并不会清除磁盘上的缓存文件,但它会刷新 Nginx 内部对这些文件的状态,对于某些配置更改或内部问题可能有用。它不会像 rm -rf 那样删除缓存数据。

sudo systemctl restart nginx
# 或者
sudo service nginx restart

总结与建议

  • 对于生产环境的反向代理缓存清除:强烈推荐使用 ngx_cache_purge 模块。它提供了细粒度的控制,避免了服务中断,且更安全。
  • 对于开发或测试环境的代理缓存:手动删除缓存目录下的文件 (rm -rf) 简单粗暴,但要注意路径和权限。
  • 对于浏览器缓存:采用版本化 URL 是最佳实践,能有效避免用户看到旧内容。同时,为不希望缓存的页面设置合适的 Cache-Control 头。

选择哪种方法取决于你的具体需求、Nginx 版本以及你对服务可用性的要求。

http://www.zskr.cn/news/73310.html

相关文章:

  • 2025年江苏保冷柜生产厂家精选Top 5推荐指南
  • 2025年重庆地区五大烹饪学校排行榜,学烹饪哪家好?
  • 习题解析之:统计文本中单词数
  • 基于西城微科SIC8833芯片的口袋电子秤方案解析
  • 习题解析之:罗马数字转换
  • HR如何做好招聘、考勤、绩效管理?2025年12月人力资源SaaS系统功能详解及推荐
  • 2025年12月北京遗产继承律师律所综合推荐与选择指南
  • 2025年12月人力资源管理系统最新排行榜单权威发布:人力资源SaaS、HR管理、人才招聘管理系统
  • 在AI时代,寻找新需求是开发者面临的真正挑战——以某知名近似最近邻搜索库为例
  • AI-ITSM的时代正在到来:深度解读Gartner最新报告
  • Redis 内存淘汰策略(8 种)
  • 小米汽车在智能座舱使用消费级芯片,你怎么看
  • 大雪将至,码上围炉 | Copdigger邀你共赴一场静默的「深度更新」
  • rust语言常用属性
  • AI一周资讯 251129-251205
  • 高性价比家政服务公司推荐,广州喜相缘家政实力上榜
  • 2025年AI知识库本地化部署厂商全景扫描:如何把大模型装进企业“保险箱”
  • 从结构化到多模态,AI 时代如何利用多模态数据智能中台激活业务价值?
  • 2025年苏州地区信誉好的西餐培训学院推荐TOP5,专业西餐
  • 2025年泥浆土压变送器工厂权威推荐榜单:泥浆油脂压力变送器‌/盾构机土压变送器‌/盾构油压变送器‌‌源头工厂精选
  • 2025年知识库本地化部署厂商:企业智能安全升级的核心路径
  • 阵列信号处理中的自适应波束形成技术
  • Flutter部件出场即动画,不显示时不占用空间不占内存
  • C# 深浅拷贝、值类型、引用类型浅析
  • 2025 美国 EOR 名义雇主推荐:Safeguard Global人力资源服务专家
  • 交通事故法律服务口碑排名 2026:权威解析专业机构选择指南
  • 【GitHub】安装以及配置远程仓库 - zhiao
  • 2025年安全隔离栅优质仪器五大厂家推荐,工业自动化防护设备
  • 2025年全屋定制源头工厂实力排名,精选全屋定制制造厂推荐
  • 2025年江浙沪网带炉实力供应商TOP5排行榜,专业网带炉厂