如何清空 Nginx 的缓存?
清 Nginx 缓存按类型处理:proxy/FastCGI 缓存找到 cache_path 目录删除文件后 reload;精细化失效用 proxy_cache_bypass 或 PURGE 模块;opcache/浏览器缓存另说。本文分类给出操作。
先分清缓存类型: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_size 与 inactive(多久不访问就淘汰),Nginx 的 cache manager 会自动维持水位。
Q:为什么清了缓存页面还是旧的?
A:大概率是浏览器或 CDN 缓存——强刷(Ctrl+F5)或 curl 直接测源站验证。