Nginx proxy_cache 加速網站存取,但內容更新時需精準清除特定 URL 的快取。手動查找刪除效率低,本文提供自動化 Shell 腳本支援批量指定檔案名清理。
./clean_cache.sh index.html style.css app.jsgrep 比對檔案內容精準定位#!/bin/bash
# Auto Clean Nginx Proxy Cache
# Usage: ./clean_nginx_cache.sh file1 [file2 ...]
CACHE_DIR="/data/www/proxy_cache_dir" # 請修改為實際快取目錄
# 參數檢查
if [ $# -eq 0 ]; then
echo "用法: $0 要清理的檔案名1 [檔案名2 ...]"
echo "例: $0 index.html style.css"
exit 1
fi
echo "準備清理快取檔案: $*"
echo "快取目錄: $CACHE_DIR"
echo "------------------------------"
# 逐一處理輸入檔案名
for file in "$@"; do
echo "處理: $file"
# 在快取目錄遞迴搜尋包含該檔案名的快取檔
# 輸出匹配檔案的完整路徑
mapfile -t cache_files < <(grep -ral "$file" "$CACHE_DIR" 2>/dev/null | sort -u)
if [ ${#cache_files[@]} -eq 0 ]; then
echo " 未找到相關快取"
continue
fi
for cache_file in "${cache_files[@]}"; do
echo " 刪除: $cache_file"
rm -f "$cache_file"
echo " 完成: $file → $cache_file 已刪除"
done
done
echo "------------------------------"
echo "快取清理作業完成"
chmod +x clean_nginx_cache.sh
./clean_nginx_cache.sh index.html api/v1/user.js
crontab -e
# 每小時第 5 分清理首頁與 API 快取
5 * * * * /path/to/clean_nginx_cache.sh index.html api/ >/var/log/nginx_cache_clean.log 2>&1
在 CI/CD 部署腳本中,發布新版本後自動呼叫:
# 部署完成後
/path/to/clean_nginx_cache.sh $(cat changed_files.txt)
ngx_cache_purge 支援 HTTP PURGE 方法,更高效proxy_cache_key 使 URL 與快取檔案名對應,避免 grep 全文搜尋find + xargs 或建立索引資料庫proxy_cache_path ... keys_zone=mycache:10m 並在共享記憶體區查找,或使用 ngx_cache_purgeindex.html)會匹配所有目錄,建議加入路徑特徵:grep -ral "domain.com/index.html"善用自動化腳本配合 Nginx 快取機制,能在內容更新與效能之間取得最佳平衡。