欢迎光临杭州华金科技
马上发布信息
详情描述
清空nginx缓存并强制刷新实现过程

要清空 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 来快速清除缓存了。