要清空 Nginx 缓存并强制刷新,主要涉及两个方面:清除 Nginx 自身的缓存(如果配置了代理缓存)和强制客户端(浏览器/CDN)刷新缓存。
以下是完整的操作步骤:
一、清空 Nginx 代理缓存
1. 确认缓存配置
首先查看 Nginx 配置中是否启用了代理缓存:
# 通常在主配置或站点配置中
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_cache_key "$scheme$request_method$host$request_uri";
proxy_cache_valid 200 302 1h;
proxy_cache_valid 404 1m;
# ... 其他配置
}
}
2. 清除缓存的方法
方法一:删除缓存文件(推荐)
# 1. 找到缓存目录
sudo find /var/cache/nginx -type f -delete
# 或使用更安全的方式
sudo rm -rf /var/cache/nginx/*
方法二:使用 Nginx 的缓存清除功能(需要配置)
在 Nginx 配置中添加:
# 在 http 块中添加
map $request_method $purge_method {
PURGE 1;
default 0;
}
# 在 server 块中添加
location / {
proxy_cache_purge $purge_method;
}
然后发送清除请求:
curl -X PURGE http://example.com/path/to/file
方法三:重启 Nginx(较重量级)
sudo systemctl reload nginx # 优雅重载
# 或
sudo systemctl restart nginx # 完全重启
二、强制客户端刷新缓存
1. 修改资源 URL(添加版本号/哈希)
<!-- 添加查询参数 -->
<link rel="stylesheet" href="/style.css?v=1.0.1">
<!-- 或使用文件哈希 -->
<link rel="stylesheet" href="/style.a1b2c3d4.css">
2. 修改 Nginx 配置,禁用缓存或设置短缓存
# 针对特定文件类型
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg)$ {
expires 1h; # 设置较短的过期时间
add_header Cache-Control "public, max-age=3600, must-revalidate";
}
# 完全禁用缓存(开发环境)
location / {
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
add_header Expires 0;
}
3. 立即生效的重载
# 检查配置语法
sudo nginx -t
# 重新加载配置(不中断服务)
sudo nginx -s reload
# 或
sudo systemctl reload nginx
三、完整操作流程示例
# 1. 备份当前配置
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
# 2. 清空缓存文件
sudo rm -rf /var/cache/nginx/*
# 3. 修改配置,添加缓存控制头部
# 编辑 /etc/nginx/conf.d/your-site.conf
# 添加:
# location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
# expires 1h;
# add_header Cache-Control "public, max-age=3600";
# }
# 4. 测试配置
sudo nginx -t
# 5. 重新加载配置
sudo systemctl reload nginx
# 6. 验证缓存头
curl -I http://your-domain.com/static/js/app.js
四、验证缓存是否清除
检查 HTTP 头部
# 查看响应头
curl -I http://your-domain.com/resource
# 应该看到类似:
# Cache-Control: max-age=3600
# Expires: [新的时间]
使用浏览器开发者工具
按 F12 打开开发者工具
切换到 Network 标签
勾选 "Disable cache"(仅限当前会话)
刷新页面 (Ctrl+F5 强制刷新)
五、注意事项
生产环境谨慎操作:清除缓存可能导致短时间内服务器负载增加
CDN 缓存:如果使用了 CDN,还需要在 CDN 控制台清除缓存
逐步清除:可以按目录或文件类型分批清除
监控:清除缓存后监控服务器性能和错误率
六、自动化脚本示例
创建清除缓存脚本 /usr/local/bin/clear-nginx-cache.sh:
#!/bin/bash
echo "开始清除 Nginx 缓存..."
# 清空缓存目录
CACHE_DIR="/var/cache/nginx"
if [ -d "$CACHE_DIR" ]; then
find "$CACHE_DIR" -type f -delete
echo "已清空缓存目录: $CACHE_DIR"
else
echo "缓存目录不存在: $CACHE_DIR"
fi
# 重载 Nginx
if sudo nginx -t 2>/dev/null; then
sudo systemctl reload nginx
echo "Nginx 配置已重载"
else
echo "Nginx 配置测试失败,请检查配置"
exit 1
fi
echo "缓存清除完成!"
设置执行权限:
sudo chmod +x /usr/local/bin/clear-nginx-cache.sh
这样您就可以通过运行 sudo clear-nginx-cache.sh 来快速清除缓存了。