如何清空 Nginx 的缓存?

清 Nginx 缓存按类型处理:proxy/FastCGI 缓存找到 cache_path 目录删除文件后 reload;精细化失效用 proxy_cache_bypass 或 PURGE 模块;opcache/浏览器缓存另说。本文分类给出操作。

最佳实践
如何清空 Nginx 的缓存?封面

先分清缓存类型:Nginx 自己的缓存(proxy_cache / fastcgi_cache)清法是找到 proxy_cache_path/fastcgi_cache_path 配置的目录,删掉内容并 reload**;想只失效某个 URL 用带 proxy_cache_bypass 的请求或商业版/第三方的 PURGE 模块。另外两类容易混淆的"缓存"——PHP OPcache 和浏览器缓存——清法完全不同。**

一、清 proxy_cache / fastcgi_cache

# 1. 找缓存目录
grep -r "cache_path" /etc/nginx/
# proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m ...

# 2. 删除缓存文件
sudo rm -rf /var/cache/nginx/*

# 3. reload
sudo nginx -t && sudo systemctl reload nginx

缓存文件会按访问重新生成,安全无副作用。

二、精细化失效(不清整个目录)

临时绕过缓存回源(验证后端最新内容):

curl -H "Cache-Control: no-cache" http://site/page    # 需配置 proxy_cache_bypass

配置:

proxy_cache_bypass $http_cache_control;   # 客户端带 no-cache 时回源

单 URL 主动失效:开源版没有原生 PURGE,可用 proxy_cache_purge 第三方模块(nginx-plusplus 自带):

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

三、别搞混的两种"缓存"

你以为要清的 实际在哪 清法
PHP 页面还是旧的 PHP OPcache systemctl reload php-fpm 或 opcache_reset()
用户看到旧内容 浏览器/CDN 缓存 资源文件名加版本哈希、调 Cache-Control、CDN 控制台刷新

Nginx 没配 proxy_cache 时,它本身没有页面缓存可清——问题多半在上面两行。

观测云对照

缓存命中率值得监控。 观测云采集 Nginx 日志后统计缓存 HIT/MISS 比例(日志里加 $upstream_cache_status 变量),清缓存或调缓存策略前后的命中率变化立即可见。

常见问题(FAQ)

Q:删缓存文件时 Nginx 还在写会冲突吗?
A:不会,缓存管理器会处理;稳妥做法是先删再 reload,或把目录改名让 Nginx 重建。

Q:缓存目录暴涨怎么控制?
A:proxy_cache_path 里设 max_sizeinactive(多久不访问就淘汰),Nginx 的 cache manager 会自动维持水位。

Q:为什么清了缓存页面还是旧的?
A:大概率是浏览器或 CDN 缓存——强刷(Ctrl+F5)或 curl 直接测源站验证。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台