当前位置: 首页 > 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.dtcms.com/a/582948.html

相关文章:

  • 网站制作公海南省海口市龙华区
  • 【电子元器件·17】三极管的发射极e、基极b、集电极c 和 类型、主回路电流方向 的 快速判断方法
  • 浙江省城乡和住房建设厅网站首页dede做购物网站
  • ps做素材下载网站装潢设计和室内设计的区别
  • 程序员求职突围
  • 江苏营销型网站公司如何做网络推广推广
  • 网站建设与维护的论述题网站建设销售的技巧话语
  • 进程替换(主要接口讲解)
  • 网站开发常用语言总结怎么让别人访问我建的网站
  • 接平面设计私活的网站怎样做旅游城市住宿网站
  • nodejs同时做网站和后台管理怎么申请一个域名
  • 天津营销类网站设计网站建设管理要求
  • 地矿局网站建设方案深圳互联网设计公司
  • ubuntu更改使用期望的内核版本
  • 芋道后端部署后总自己挂?从 Nginx 报错到 OOM Kill 的完整排查与修复(2核2G 服务器实战)
  • 哪个网站可以做照片分享申远空间设计公司
  • 系统开发必须遵守的原则有哪些网站可以做多少优化关键词
  • PyTorch深度学习进阶(一)(经典卷积神经网络 LeNet)
  • 北京搭建网站做棋牌网站
  • UiPath2025笔记第十节:利用java反射编写智能体
  • 如何查网站的空间wordpress 移动端模板下载
  • 基于萤火虫+Gmapping、分层+A*优化的导航方案
  • 网站开发师是做什么的wordpress固定链接静态化后打不开
  • 重庆城乡建设网站小程序开发哪个公司好
  • yolo地裂缝(wsl+ubuntu)
  • 湖北 网站 备案 时间个人网站可以做企业宣传
  • mvc架构购物网站开发成都必去的十大景点
  • 在线设计网站可以做ps和ppt爱吖网
  • 徐州市城乡建设局网站首页国外设计网站d开头的
  • Java 集成 onlyoffice 预览文件功能