要清空 Nginx 缓存并强制刷新,主要涉及两个方面:清除 Nginx 自身的缓存(如果配置了代理缓存)和强制客户端(浏览器/CDN)刷新缓存。
以下是完整的操作步骤:
首先查看 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;
# ... 其他配置
}
}
# 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 # 完全重启
<!-- 添加查询参数 -->
<link rel="stylesheet" href="/style.css?v=1.0.1">
<!-- 或使用文件哈希 -->
<link rel="stylesheet" href="/style.a1b2c3d4.css">
# 针对特定文件类型
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;
}
# 检查配置语法
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
# 查看响应头
curl -I http://your-domain.com/resource
# 应该看到类似:
# Cache-Control: max-age=3600
# Expires: [新的时间]
创建清除缓存脚本 /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 来快速清除缓存了。